//
// ViewController.m
// HideMoreDemo
//
// Created by 坏先森 on 2017/5/22.
// Copyright © 2017年 坏先森. All rights reserved.
//
// 默认超过100字之后,其余部分隐藏
#define DEFAULT_HIDDEN_LENGTH 100
#import "ViewController.h"
@interface ViewController () {
UIButton *_more; // 更多按钮
UILabel *_label; // 动态的label
NSString *_totalString; // 某人发动态的原文
BOOL _isHidden; // 更多按钮隐藏与否
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_totalString =@"1.我是一段很短的文字!用来测试更多按钮会不会显示,如果这么短的文字,更多按钮再显示,那么代码肯定是有问题的!";
//_totalString = @"2.本demo主要实现类似于微信朋友圈的动态文字部分,如果朋友圈某个人发的动态非常长,那么肯定是不能让它全部显示的,这就是所说的更多按钮,如果文字很短,那么更多按钮是隐藏的.点击更多按钮之后,文字全部展开,更多按钮随之下移,并且文字变为收回,再点击则还原。这里只实现初步的功能,实际开发中肯定会有其他的需求,比如展开之后下滑看其他的动态,回来之后默认关闭等等之类的需求,在此不做说明!这段文字就是某人发动态的原文,本文默认超过100字之后,多余的部分隐藏,代码比较简单,不做赘述!";
[self creatUI];
}
#pragma mark - 方法
- (void)creatUI {
if (_totalString.length < DEFAULT_HIDDEN_LENGTH) {
_isHidden = YES;
}
_label = [[UILabel alloc] init];
_label.backgroundColor = [UIColor cyanColor];
_label.textColor = [UIColor blackColor];
_label.numberOfLines = 0;
_label.text = _totalString;
_label.font = [UIFont systemFontOfSize:16.0f];
[self.view addSubview:_label];
_more = [UIButton buttonWithType:UIButtonTypeCustom];
_more.backgroundColor = [UIColor yellowColor];
[_more setTitle:@"more" forState:UIControlStateNormal];
[_more setTitle:@"close" forState:UIControlStateSelected];
[_more setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[_more addTarget:self action:@selector(moreClick) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:_more];
[self zjjChangeFrameWithBool:_isHidden];
}
- (float)calculateFitHeightWithString:(NSString *)string {
CGRect rect = [string boundingRectWithSize:CGSizeMake(self.view.frame.size.width-20, 10000) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSForegroundColorAttributeName:[UIColor blackColor],NSFontAttributeName:[UIFont systemFontOfSize:16.0f]} context:nil];
return rect.size.height;
}
#pragma mark - 方法
- (void)moreClick {
_isHidden = !_isHidden;
[self zjjChangeFrameWithBool:_isHidden];
_more.selected = _isHidden;
_more.hidden = NO;
}
- (void)zjjChangeFrameWithBool:(BOOL)isHidden {
float labelH = 0.0f;
if (isHidden) {
labelH = [self calculateFitHeightWithString:_totalString];
}else {
NSRange range = NSMakeRange(0, DEFAULT_HIDDEN_LENGTH);
NSString *subString = [_totalString substringWithRange:range];
labelH = [self calculateFitHeightWithString:subString];
}
_label.frame = CGRectMake(10, 100, self.view.frame.size.width-20, labelH+10);
_more.frame = CGRectMake(self.view.frame.size.width-100, _label.frame.size.height+_label.frame.origin.y+10, 80, 40);
_more.hidden = isHidden;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end