Ios 再次动态调整UITableViewCell的大小

Ios 再次动态调整UITableViewCell的大小,ios,xcode,uitableview,Ios,Xcode,Uitableview,嗯,我一直在寻找很多方法来解决我的问题,但是,我没有找到任何有用的方法 我有自己的自定义单元格,可以(或不能)按自由顺序包含图像、文本、标题等,因此我需要根据行的内容设置行的高度。 就像这两个: http://db.tt/HbnXMMFn 我能制作它们的唯一方法是通过故事板 因此,我调用tableView:cellforrowatinex: 把所有的东西都放在那里 然后我想设置行的高度,但我不能这样做,因为行的高度是在tableView:height…::中设置的,在tableView:cell

嗯,我一直在寻找很多方法来解决我的问题,但是,我没有找到任何有用的方法

我有自己的自定义单元格,可以(或不能)按自由顺序包含图像、文本、标题等,因此我需要根据行的内容设置行的高度。 就像这两个: http://db.tt/HbnXMMFn

我能制作它们的唯一方法是通过故事板

因此,我调用
tableView:cellforrowatinex:
把所有的东西都放在那里 然后我想设置行的高度,但我不能这样做,因为行的高度是在
tableView:height…
::中设置的,在
tableView:cellforrowatinex:

顺便说一句,我的故事板中也有限制,所以,如果我能用它们来计算单元格高度,那就太好了

当我旋转iPhone时,它会完美地改变宽度,奇怪的是,我不能改变高度


如何解决我的问题?

您可以在tableView:heightForRowAtIndexPath:中设置高度。在该方法中,您可以访问索引路径,从而访问向单元格提供数据的数组的索引。因此,您需要查看该数据,并进行确定单元格高度所需的任何计算,然后返回该值

编辑后:以下是计算多行标签高度的示例。我创建一个临时标签,用此行将包含的文本填充它,然后使用sizeWithFont:constrainedToSize:LineBreakMode:进行计算:

-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    UILabel *label = [[UILabel alloc] init];
    label.numberOfLines = 0; // allows label to have as many lines as needed
    label.text = _objects[indexPath.row][@"detail2"]; // this is the data I'm passing in the detail label
    CGSize labelSize = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(300, 300000) lineBreakMode:NSLineBreakByWordWrapping];
    CGFloat h = labelSize.height;
    return h + 50; //50 is base height for my cell with only one line of text, determined empirically
}

您可以在tableView:heightForRowAtIndexPath:中设置高度。在该方法中,您可以访问索引路径,从而访问向单元格提供数据的数组的索引。因此,您需要查看该数据,并进行确定单元格高度所需的任何计算,然后返回该值

编辑后:以下是计算多行标签高度的示例。我创建一个临时标签,用此行将包含的文本填充它,然后使用sizeWithFont:constrainedToSize:LineBreakMode:进行计算:

-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    UILabel *label = [[UILabel alloc] init];
    label.numberOfLines = 0; // allows label to have as many lines as needed
    label.text = _objects[indexPath.row][@"detail2"]; // this is the data I'm passing in the detail label
    CGSize labelSize = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(300, 300000) lineBreakMode:NSLineBreakByWordWrapping];
    CGFloat h = labelSize.height;
    return h + 50; //50 is base height for my cell with only one line of text, determined empirically
}

您可以做的是使用一个数据结构,如数组或任何预先保存高度的数据结构,然后在heightForRowAtIndexPath中使用它来返回正确的值。在这个过程中,您甚至可以预先制作单元格内容,并可以更快地渲染单元格。您可以将所有这些逻辑都放在ViewWillDisplay或其他位置。您可以使用一个数据结构,如数组或任何预先保存高度的数据结构,然后在heightForRowAtIndexPath中使用它来返回正确的值。在这个过程中,您甚至可以预先制作单元格内容,并可以更快地渲染单元格。您可以将所有这些逻辑放在ViewWillDisplay或其他位置。据我所知,我可以使用tableView:CellForRowatineXpath:访问我的单元格,对吗?然后返回UITableViewCell。但是我需要它来返回我的自定义单元格。@PhilippConstantinopolski,您不想访问HeightForRowatineXpath方法中的单元格(如果这是您所说的),您想访问数据以根据内容进行高度计算。您可能需要根据自定义单元格的大小添加一些值(对于基准高度),但该值应该由您在IB中创建的单元格高度固定。请尝试解释我需要什么。我只能在第一步设置高度?我也可以在那里设置内容吗?或者我可以在那里访问我的自定义单元格约束值吗?不应该使用步骤1,我不确定你想用它做什么。正如我在回答中所说的,您在HeightForRowatineXpath中根据从数据(而不是从您的单元格)中获得的值进行计算--不要在此处访问您的单元格。如果文本视图或多行标签中有文本,则可以基于该文本计算高度。如果你有一个图像,根据图像的高度计算高度,等等。我在回答中添加了一个例子来计算多行标签的高度。你知道其他方法吗?如果没有任何计算就好了。我知道(空)大小合适。它实际上是做什么的?据我所知,我可以通过tableView:CellForRowatineXpath:访问我的手机,对吗?然后返回UITableViewCell。但是我需要它来返回我的自定义单元格。@PhilippConstantinopolski,您不想访问HeightForRowatineXpath方法中的单元格(如果这是您所说的),您想访问数据以根据内容进行高度计算。您可能需要根据自定义单元格的大小添加一些值(对于基准高度),但该值应该由您在IB中创建的单元格高度固定。请尝试解释我需要什么。我只能在第一步设置高度?我也可以在那里设置内容吗?或者我可以在那里访问我的自定义单元格约束值吗?不应该使用步骤1,我不确定你想用它做什么。正如我在回答中所说的,您在HeightForRowatineXpath中根据从数据(而不是从您的单元格)中获得的值进行计算--不要在此处访问您的单元格。如果文本视图或多行标签中有文本,则可以基于该文本计算高度。如果你有一个图像,根据图像的高度计算高度,等等。我在回答中添加了一个例子来计算多行标签的高度。你知道其他方法吗?如果没有任何计算就好了。我知道(空)大小合适。它实际上做什么?