iOS:tableViewCell高度自适应(一)

自定义tableViewCell里含有一个label,我们想让cell高度根据label自动调整,只需要做到:

    1. 给定预估高度 _mTableView.estimatedRowHeight = 44.f;
    1. 设置_label.numberOfLines = 0;
    1. 赋值结束之后,更新约束:[self layoutIfNeeded];需要注意的是通过自动布局方式设置UILabel在TableViewCell的位置,必须保证Label的top、left、right、bottom都有约束条件。

具体实现方法如下代码所示:

ViewController.m

#import "ViewController.h"

#import "TableViewCell.h"

@interface ViewController ()

@property(nonatomic, strong) UITableView * mTableView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self.view addSubview:self.mTableView];
}

#pragma mark - tableViewDelegate&datasource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 10;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    static NSString * identifier = @"cellID";
    TableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (!cell) {
        cell = [[TableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
    }
    cell.contentStr = @"财政部、中国人民银行于2017年5月19日以利率招标方式进行了2017年中央国库现金管理商业银行定期存款(二期)招投标,向市场中投放了800亿元的“中央国库现金管理商业银行定期存款”,为期3个月,中标利率是4.5%,较上次利率上浮30个基点。";
    
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    
}


#pragma mark - lazy load
- (UITableView *)mTableView {
    
    if (!_mTableView) {
        _mTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) style:UITableViewStylePlain];
        _mTableView.delegate = self;
        _mTableView.dataSource = self;
        //1、必给预估高度
        _mTableView.estimatedRowHeight = 44.f;
    }
    return _mTableView;
}

@end

TableViewCell.h

#import 

@interface TableViewCell : UITableViewCell

@property(nonatomic, copy) NSString * contentStr;

@end

TableViewCell.m

#import "TableViewCell.h"

#import "Masonry.h"

@interface TableViewCell ()

@property(nonatomic, strong) UILabel * label;

@end

@implementation TableViewCell

- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
        
        [self createUI];
    }
    return self;
}

#pragma mark - create UI
- (void)createUI {
    
    [self.contentView addSubview:self.label];
}

- (void)setContentStr:(NSString *)contentStr {
    
    _contentStr = contentStr;
    self.label.text = contentStr;
    
    //3、赋值结束需要更新约束
    [self layoutIfNeeded];
}

- (void)layoutSubviews {
    [super layoutSubviews];
    
    [self addConstraintsToViews];
}

#pragma mark - 添加约束
- (void)addConstraintsToViews {
    
    [self.label mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.left.equalTo(self.contentView).offset(10);
        make.right.bottom.equalTo(self.contentView).offset(-10);
    }];
}

#pragma mark - lazy load
- (UILabel *)label {
    
    if (!_label) {
        _label = [[UILabel alloc] init];
        //2、必给numberOfLines = 0
        _label.numberOfLines = 0;
        _label.text = @"label";
    }
    return _label;
}

@end
iOS:tableViewCell高度自适应(一)_第1张图片
效果图展示

你可能感兴趣的:(iOS:tableViewCell高度自适应(一))