iOS开发最简单的让你的Cell自适应高度

要想简单那必须用Xib,如果你是代码控也无所谓,只需要你的Cell使用Xib,其他的你依然用代码就可以。

如果不用Xib,又要label自适应高度,又要cell自适应高度,代码又臭又长。不然就用第三方,麻烦。

其实用自带的方法异常简单,简单到令人发指。。。

新建一个工程,在ViewController里写这些代码

#import "ViewController.h"
#import "TestTableViewCell.h"

@interface ViewController () 

@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) NSArray *dataArray;

@end

@implementation ViewController

static NSString *identifier = @"cell";

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView = [[UITableView alloc] init];
    self.tableView.frame = CGRectMake(0, 0, 375, 667);
    self.tableView.backgroundColor = [UIColor colorWithRed:0.635 green:1.000 blue:0.905 alpha:1.000];
    [self.tableView registerNib:[UINib nibWithNibName:@"TestTableViewCell" bundle:nil] forCellReuseIdentifier:identifier];
    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    [self.view addSubview:self.tableView];
    
    self.tableView.estimatedRowHeight = 100;
    self.tableView.rowHeight = UITableViewAutomaticDimension;
    
    NSDictionary *dict1 = [NSDictionary dictionaryWithObjectsAndKeys:@"央视报道显示,三家化工厂中,最大的化工厂叫常隆化工有限公司,紧接着的是长宇化工和华达化工。一名在常隆化工工作了30多年的老员工说,在他记载的生产日志上,像克百威、灭多威、异丙威、氰基萘酚这样的都属于是剧毒类产品。而厂里职工有时候为了省事,不光将有毒废水直接排出厂外,还将危险废物偷偷埋到了地下,对环境带来了很大隐患。", @"content", nil];
    NSDictionary *dict2 = [NSDictionary dictionaryWithObjectsAndKeys:@"诺普信不是别人,正是被外界称之为“农药第一股”的上市公司。", @"content", nil];
    NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:@"新京报记者查询工商注册信息看到,江苏常隆化工有限公司注册资本30000万元,成立于1979年02月01日,股东之一是市公司深圳诺普信农化股份有限公司。", @"content", nil];
    NSDictionary *dict4 = [NSDictionary dictionaryWithObjectsAndKeys:@"常隆化工是国家重点高新技术企业,但它的另一面却并不光鲜。2015年,江苏省靖江市一养猪场被曝“地下藏毒万吨”,其中就有常隆化工出来的化工垃圾;2014年12月,常隆化工旗下的常隆农化等6家企业因倾倒废酸污染河水,被江苏省高级人民法院判罚1.6亿多元的罚款。", @"content", nil];
    NSDictionary *dict5 = [NSDictionary dictionaryWithObjectsAndKeys:@"常隆化工是国家重点高新技术企业,但它的另一面却并不光鲜。2015年,江苏省靖江市一养猪场被曝“地下藏毒万吨”,其中就有常隆化工出来的化工垃圾;2014年12月,常隆化工旗下的常隆农化等6家企业因倾倒废酸污染河水,被江苏省高级人民法院判罚1.6亿多元的罚款。", @"content", nil];
    NSDictionary *dict6 = [NSDictionary dictionaryWithObjectsAndKeys:@"常隆化工是国家重点高新技术企业,但它的另一面却并不光鲜。2015年,江苏省靖江市一养猪场被曝“地下藏毒万吨”,其中就有常隆化工出来的化工垃圾;2014年12月,常隆化工旗下的常隆农化等6家企业因倾倒废酸污染河水,被江苏省高级人民法院判罚1.6亿多元的罚款。常隆化工是国家重点高新技术企业,但它的另一面却并不光鲜。2015年,江苏省靖江市一养猪场被曝“地下藏毒万吨”,其中就有常隆化工出来的化工垃圾;2014年12月,常隆化工旗下的常隆农化等6家企业因倾倒废酸污染河水,被江苏省高级人民法院判罚1.6亿多元的罚款。", @"content", nil];
    self.dataArray = @[dict1, dict2, dict3, dict4, dict5, dict6, dict1, dict2, dict3, dict4, dict5, dict6];
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return self.dataArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    TestTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier forIndexPath:indexPath];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.backgroundColor = [UIColor colorWithRed:0.678 green:0.640 blue:1.000 alpha:1.000];
    NSDictionary *dict = self.dataArray[indexPath.row];
    cell.label.text = dict[@"content"];
    cell.label.numberOfLines = 0;
    return cell;
}
@end


- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
heightForRow这个方法不用写就行
最重要的代码就是下面这两行代码

self.tableView.estimatedRowHeight = 100;
self.tableView.rowHeight = UITableViewAutomaticDimension;

100可以随便写,只要有个数就行。当然也不能忘了

cell.label.numberOfLines = 0;

为了方便理解,我的TestTableViewCell中只有一个label,把label拖到Xib上就不用详细讲解了吧。

只有.h中的这一行代码,一定要和Xib上的label关联哦。

@property (weak, nonatomic) IBOutlet UILabel *label;






你可能感兴趣的:(iOS开发)