iOS开发--storyboard+autolayout定制灵活高度tableviewCell

第一步、为了简化流程直接用新创建工程中的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];

}

 


你可能感兴趣的:(iOS开发--storyboard+autolayout定制灵活高度tableviewCell)