是否可以通过cellForRowAtIndexPath更新UITableCell的高度?

时间:2010-09-16 07:14:48

标签: iphone objective-c

在处理UITableViewControllers时,有没有办法设置除此方法之外的单个表格单元格的高度:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;

基本上我要做的是将一个文本块插入一个具有可变高度的表格单元格中。文本可以是100-1000个字符长的任何地方。我想要做的是使表格单元格的高度适合将插入其中的文本块。我不看的是一种缩小文本以适应固定高度的表格单元格行的方法(这似乎是我找到的解决方案)。有没有办法通过以下方法调用单元格的高度?

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

目前,我正在使用以下代码片段来查找文本的高度,但我不认为这是执行此操作的正确/最佳方式。如果我得到了文本块的大小限制,那么通过这种方法我可以用适当的高度更新表格单元似乎是合乎逻辑的:cellForRowAtIndexPath。另外我读到下面返回的值是以像素为单位,所以我需要将像素转换为其他数值,以便为行提供正确的高度吗?

CGSize constraintSize;
constraintSize.width = 500.0f;
constraintSize.height = 500.0f;
CGSize theSize = [theText sizeWithFont:[UIFont systemFontOfSize:14.0f] constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];

更新 所以这个链接似乎做了我想要的: Get tableView:heightForRowAtIndexPath: to happen after tableView:cellForRowAtIndexPath:?

但是,上面的链接似乎仍然会剪切文本的最后几个字符/单词。这一切似乎都取决于文本块中使用的字符/单词的数量。我错了。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

剪裁的最后一个字符可能是由于约束尺寸太大造成的。将它减少几个像素,看看它是如何工作的。您还可以在返回的高度上添加常量偏移。所有UILabel都有一个很小的余量,在您的参考答案中可能没有正确考虑。