好吧,我一直在寻找解决问题的方法,但是,我没有找到任何有用的东西。
我有自定义单元格,它可以(或不能)以自由顺序包含图像,文本,标题等,因此我需要根据其内容设置行的高度。 像这两个:http://db.tt/AVBKYuEY http://db.tt/HbnXMMFn
我可以制作它们的唯一方法是通过故事板。
所以,我打电话给tableView:cellForRowAtIndex:
并在那里设置全部内容
然后我想设置行的高度,但是我不能这样做,因为行的高度是在tableView:height...
:中设置的,这被称为BEFORE tableView:cellForRowAtIndex:
顺便说一句,我的故事板中也有约束,所以,如果我可以使用它们计算单元格高度,那就太棒了。
当我旋转iPhone时,它也完美地改变了宽度,实际上我无法改变高度是奇怪的
如何解决我的问题?
答案 0 :(得分:1)
您可以在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
}