我创建了一个自定义单元格,在其中放置了UITextView
,我想根据UITextView
文本长度的长度更改单元格的高度。我知道如何使用heightForRowAtIndexPath
静态更改单元格高度,但我无法根据内容动态地执行此操作。
我在这个论坛和其他几个主题上已经阅读了十几个主题,但我找不到我想要的答案。
有什么想法吗?
答案 0 :(得分:2)
in heightForRowAtIndexPath
float height = [cell.textView.text sizeWithFont:cell.textView.font constrainedToSize:CGSizeMake(cell.textView.frame.size.width, 10000)].height;
return height;
10000它是单元格的最大高度,实际上你可以设置最大整数值
答案 1 :(得分:0)
在textViewDidChange方法中,调用
[tableView beginUpdates];
[tableView endUpdates];
每当用户键入一个字母时,这将触发heightForRowAtIndexPath重新计算所有单元格大小。然后在heightForRowAtIndexPath中,您可以计算单元格的必要大小。
sizeWithFont方法将返回在UILabel中显示文本所需的大小,由于内容插入,行间距等原因,这与UITextView略有不同。我过去曾使用过一些hacky解决方案。如果您创建一个临时UITextView,设置它的文本,并使用[UIView sizeThatFits:constraintSize]来获得适合约束内所有内容的大小。 (关于此方法的文档有点不清楚 - 请查看此答案以获取更多信息:question about UIView's 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,而是重新使用相同的单元来计算不同文本的高度。