iOS - 发布动态文字更多、收起的实现

//

//  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







猜你喜欢

转载自blog.csdn.net/q_q33757152/article/details/72624522