您的位置:首页 > 移动开发 > IOS开发

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

2015-05-14 18:44 656 查看
第一步、为了简化流程直接用新创建工程中的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];
}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息