iOS

来源:互联网 发布:电话线传网络 编辑:程序博客网 时间:2024/06/06 01:53

//

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

    [superviewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    

    _totalString =@"1.我是一段很短的文字!用来测试更多按钮会不会显示,如果这么短的文字,更多按钮再显示,那么代码肯定是有问题的!";


    //_totalString = @"2.demo主要实现类似于微信朋友圈的动态文字部分,如果朋友圈某个人发的动态非常长,那么肯定是不能让它全部显示的,这就是所说的更多按钮,如果文字很短,那么更多按钮是隐藏的.点击更多按钮之后,文字全部展开,更多按钮随之下移,并且文字变为收回,再点击则还原。这里只实现初步的功能,实际开发中肯定会有其他的需求,比如展开之后下滑看其他的动态,回来之后默认关闭等等之类的需求,在此不做说明!这段文字就是某人发动态的原文,本文默认超过100字之后,多余的部分隐藏,代码比较简单,不做赘述!";

    

    [selfcreatUI];

    

}


#pragma mark - 方法

- (void)creatUI {


    if (_totalString.length < DEFAULT_HIDDEN_LENGTH) {

        _isHidden =YES;

    }

    

    _label = [[UILabelalloc] init];

    _label.backgroundColor = [UIColorcyanColor];

    _label.textColor = [UIColorblackColor];

    _label.numberOfLines =0;

    _label.text =_totalString;

    _label.font = [UIFontsystemFontOfSize:16.0f];

    [self.viewaddSubview:_label];

    

    _more = [UIButtonbuttonWithType:UIButtonTypeCustom];

    _more.backgroundColor = [UIColoryellowColor];

    [_moresetTitle:@"more"forState:UIControlStateNormal];

    [_moresetTitle:@"close"forState:UIControlStateSelected];

    [_moresetTitleColor:[UIColorredColor] forState:UIControlStateNormal];

    [_moreaddTarget:selfaction:@selector(moreClick)forControlEvents:UIControlEventTouchUpInside];

    [self.viewaddSubview:_more];

    

    [selfzjjChangeFrameWithBool:_isHidden];


}

- (float)calculateFitHeightWithString:(NSString *)string {

    

    CGRect rect = [stringboundingRectWithSize:CGSizeMake(self.view.frame.size.width-20,10000) options:NSStringDrawingUsesLineFragmentOriginattributes:@{NSForegroundColorAttributeName:[UIColorblackColor],NSFontAttributeName:[UIFontsystemFontOfSize:16.0f]}context:nil];

    

    return rect.size.height;

}

#pragma mark - 方法

- (void)moreClick {

    

    _isHidden = !_isHidden;


    [selfzjjChangeFrameWithBool:_isHidden];

    

    _more.selected =_isHidden;

    

    _more.hidden =NO;

}


- (void)zjjChangeFrameWithBool:(BOOL)isHidden {

    

    float labelH =0.0f;

    

    if (isHidden) {

        labelH = [selfcalculateFitHeightWithString:_totalString];

    }else {

        NSRange range =NSMakeRange(0,DEFAULT_HIDDEN_LENGTH);

        NSString *subString = [_totalStringsubstringWithRange:range];

        labelH = [selfcalculateFitHeightWithString: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 {

    [superdidReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}



@end