Iphone UITableViewCell中单元格的复杂大小调整

Iphone UITableViewCell中单元格的复杂大小调整,iphone,ios,uitableview,Iphone,Ios,Uitableview,我正在编写一个主要基于TableView的通用iOS应用程序(iPhone和iPad)。每个单元格都有多个文本区域,我需要根据内容调整其高度。我定义了故事板中的所有表格和单元格,我真的希望保持这种方式(以图形化的方式处理大小要容易得多,看看会是什么) 问题是我需要很多信息来计算单元格的最终大小(单元格和子视图的情节提要高度、标签宽度、字体大小…)。我以前的代码中只有常量,我可以手工编写值,但是: 每次我改变故事板都很痛苦 我的标签可以有不同的宽度(不同类型的电池,iPhone/iPad),我有

我正在编写一个主要基于TableView的通用iOS应用程序(iPhone和iPad)。每个单元格都有多个文本区域,我需要根据内容调整其高度。我定义了故事板中的所有表格和单元格,我真的希望保持这种方式(以图形化的方式处理大小要容易得多,看看会是什么)

问题是我需要很多信息来计算单元格的最终大小(单元格和子视图的情节提要高度、标签宽度、字体大小…)。我以前的代码中只有常量,我可以手工编写值,但是:

  • 每次我改变故事板都很痛苦
  • 我的标签可以有不同的宽度(不同类型的电池,iPhone/iPad),我有很多这样的标签,所以在这种情况下,需要跟踪的常数实在太多了
我使用该解决方案:

在单元格中,我设置了一次静态变量来记住大小(它取自故事板,所以这很好):

在计算任何单元格大小之前,我必须在表中实例化一个以设置静态变量:

- (CGFloat)tableView:(UITableView *)tableView 
                 heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // get one instance before any size computation
    // or the constant won't be there
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        static NSString *CellIdentifier = @"identifier";
        [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    });

    return [MyCell heightForCellWithData:theData];
}
我觉得我完全错过了一些东西,但我想不出其他的东西。有什么好办法吗


谢谢

首先,我认为你应该使用自定义单元格来做这些事情。现在,如果每次需要更改宽度/高度,只需要该单元格的边界。关于标签和文本字段的宽度/高度,您可以像(self.textview.bounds)一样,然后根据需要设置偏移量。这不是黑客行为,而是根据逻辑进行纯粹的编码,因为每次更改设备时,它都会相应地接受边界,因此无需记住任何内容。
希望这能奏效:)

这是最好的方法,因为你已经说明了原因。
- (CGFloat)tableView:(UITableView *)tableView 
                 heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    // get one instance before any size computation
    // or the constant won't be there
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        static NSString *CellIdentifier = @"identifier";
        [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    });

    return [MyCell heightForCellWithData:theData];
}