-1

我制作了一个自定义单元格,在其中放置了一个UITextView,我想根据UITextView文本长度的长度更改单元格的高度。我知道如何使用 静态更改单元格高度heightForRowAtIndexPath,但我无法根据内容动态地进行更改。

我已经阅读了这个论坛和其他几个主题的十几个主题,但我没有找到我正在寻找的答案。

有任何想法吗?

4

2 回答 2

2

在 heightForRowAtIndexPath

 float height = [cell.textView.text sizeWithFont:cell.textView.font constrainedToSize:CGSizeMake(cell.textView.frame.size.width, 10000)].height;
 return height;

10000 是单元格的最大高度,实际上你可以设置最大整数值

于 2013-10-25T17:16:53.787 回答
0

在您的 textViewDidChange 方法中,调用

[tableView beginUpdates];
[tableView endUpdates];

这将触发 heightForRowAtIndexPath 以在用户每次键入字母时重新计算所有单元格大小。然后在 heightForRowAtIndexPath 中,您可以计算单元格的必要大小。

sizeWithFont 方法将返回在 UILabel 中显示文本所需的大小,由于内容插入、行间距等原因,这与 UITextView 的大小略有不同。过去我使用了一个有点 hacky 的解决方案。如果您创建一个临时 UITextView,请将其设置为文本,并使用 [UIView sizeThatFits:constraintSize] 获取适合其所有内容在约束范围内的大小。(有关此方法的文档有点不清楚 - 请查看此答案以获取更多信息:关于 UIView 的 sizeThatFits 的问题

UITextView *temp = [UITextView alloc] initWithFrame:someArbitraryFrame];
temp.font = DISPLAY_FONT
temp.text = cell.textView.text;
//This gets the necessary size to fit the view's content within the specified constraints
CGSize correctSize = [self.temp sizeThatFits:CGSizeMake(CONSTRAINT_WIDTH, CONSTRAINT_HEIGHT)];
return correctSize.height

为了提高效率,您可能应该存储/延迟加载临时 textView,这样您就不会为每个单元格创建一个新的 UITextView,而是重新使用同一个单元格来计算不同文本的高度。

于 2013-10-25T21:50:25.480 回答