第一步、为了简化流程直接用新创建工程中的viewController及storyboard;
第二步、将该storyboard的view换成UITableView并且将UITableViewCell的datasource以及delegate连线到viewController,设置cell的Identifier:cell
第三步、创建RNTableViewCell来管理定制Cell,并且将storyboard中cell的类别改为RNTableviewCell
第四步、向cell中拖一个label,设置该label的相对位置(label的constraints可以不添加宽和高的约束)以及设置为sizeto fit content
第五步、在RNTableViewCell.m文件中创建IBOutLet属性的testLabel与storyboard中刚添加的label连线
@property (weak, nonatomic) IBOutletUILabel *testLabel;
第六步、在RNTableViewCell.h文件中声明一个NSString属性用来在外部设置label要显示的文本内容
@property (nonatomic, copy) NSString *testString;
第七步、在RNTableViewCell.h中提供一个外部方法
- (CGFloat)cellHeightWithTestString:(NSString *)testString;
第八步、在RNTableViewCell.m实现testString的setter方法以及第七步声明的方法
- (void)setTestString:(NSString*)testString
{
_testString = testString;
self.testLabel.text = _testString;
}
- (CGFloat)cellHeightWithTestString:(NSString *)testString
{
self.testString= testString;
return [self.testLabelsystemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height; // 关键代码:这里不可以通过label的frame去获取调整后的label高度
}
第九步、在RNTableViewCell.m中重写awakeFromNib方法设置testLabel的最大宽度
- (void)awakeFromNib {
self.testLabel.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width;
}
第十步、在viewController里设置tableview的数据及高度
- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{
return 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
RNTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (cell == nil){
cell = [[RNTableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
NSString *string = @"asdl;fkjadsl;kgad;klsjfadshg;lkadsjf;adhgfkhfhklshfljkadshgkladsjflkadjsl;kfajdsgl;kadsl;hflakdsjfl;kasdjfl;kadsjflk;adsjfl;kadsjf;ladsjfl;kadjgasdlgh;laskdjflkdasjf;lkdsjfklad;lkadsjfkladsjf;lkdasjf;lkdajfa;l"; //直接随便敲了一串字符,汗!
cell.testString = string;
self.testString= string;
return cell;
}
- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
{
RNTableViewCell *cell = (RNTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"cell"];
return [cell cellHeightWithString:self.testString];
}