UITableview获取自定义单元格高度

时间:2014-06-21 12:03:27

标签: ios objective-c xcode

我即将使用以下方法在tableview中开发自定义单元格:

http://www.appcoda.com/ios-programming-customize-uitableview-storyboard/

在我开始之前我的担忧如下。

单元格将包含三个标签,在某些情况下标签非常短,在某些情况下标签很长。

这具有的效果是细胞的高度可能会发生很大变化。

无论如何,我可以获得

的细胞高度
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

呼叫

还是有更好的方法来解决我想做的事情。

感谢

1 个答案:

答案 0 :(得分:0)

更好的方法是在渲染视图之前计算高度。

例如,您有三个带有以下数据的标签:

  1. 标题
  2. 字幕
  3. 描述
  4. 我要做的是通过以下方式计算每个字符串的大小:

    UIFont *yourFont = // [UIFont ...]
    CGSize stringBoundingBox = [someString sizeWithFont:yourFont];
    

    然后我将使用相应数据的键(标题,副标题,描述)将该大小存储在我的数据堆栈中,键将是

    1. titleSize //标题
    2. subTitleSize //用于subTitle
    3. descriptionSize
    4. NSArray的项目如下:

       @{
        @"titleSize" : [NSValue valueWithCGSize:(CGSize)titleSize],
        @"subTitleSize" : [NSValue valueWithCGSize:(CGSize)subTitleSize],
        @"descriptionSize" : [NSValue valueWithCGSize:(CGSize)descriptionSize],
        @"title" : title, //the NSString data
        @"subTitle" : subTitle, //the NSString data
        @"descriptionSize" : descriptionSize, //the NSString data
      
       }
      

      在这里你可以:

      - (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath        *)indexPath{
            NSDictionary *item = stack[indexPath.row];
            CGSize titleSize = [item[@"titleSize"] CGSizeValue];
            CGSize subTitleSize = [item[@"subTitleSize"] CGSizeValue];
            CGSize descriptionSize = [item[@"descriptionSize"] CGSizeValue];
      
            //calculate the correct height and stuff.
             ...........
      
         return height;
       }
      

      您可以创建一些常量或方法来获取您将拥有的边距和填充。

      这个解决方案的优点在于你将计算一次。但是,如果您对给定项目的数据进行更新,则需要重新计算尺寸并重新加载表格视图。