我有一个UITableView,它包含一个单元格,而该单元格又包含一个TTTextEditor(一个Three20控件),所有意图和目的都是UITextView。我正在使用TTTextEditor,因此用户可以输入动态数量的文本,并且当控件调整大小时,我正在使用委托方法来相应地增加包含单元格的高度。到目前为止一切都很好。
当我完成编辑后,当单元格现在更高时,表格不再滚动到足以覆盖内容。我假设我需要调整表格的高度以补偿单元格高度的增加,但无论我尝试什么似乎都没有效果。从阅读中,我正在尝试这个:
CGRect frame = [self.tableView frame];
CGSize contentSize = self.tableView.contentSize;
[self.tableView setFrame:CGRectMake(frame.origin.x,
frame.origin.y,
frame.size.width,
contentSize.height)];
但它不起作用 - 框架高度确实增加,但没有增加到正确的高度,并且在任何情况下,桌子不再滚动它原来的。我还在tableView上尝试了sizeToFit方法但没有成功。
有没有人能够深入了解如何让tableview的可滚动高度增加?
答案 0 :(得分:5)
您需要设置contentSize
而不是frame
。计算大小应该是什么,然后设置它。这可能需要您进行一些计算。如果您正在处理文字,那么您可能希望查看添加到名为NSString
的{{1}}的方法。另一方面,您的框架应始终是可视区域的大小,而不是可滚动区域。
编辑:请注意,对于那时没有变化的初始布局,您可能希望使用sizeWithFont:constrainedToSize:lineBreakMode:
的标准表委托机制,但是当需要像这种情况那样动态更改时,我认为调整内容大小值得一试。
答案 1 :(得分:2)
您需要做的第一件事是实现表视图委托的-tableView:heightForRowAtIndexPath:
方法。在此方法中,您可以指定表中每行所占的高度。如果表中的某些行的高度与其他行不同,那么您需要来实现此目的。
为文本编辑器的行调用此方法时,只需查找视图的高度并将其返回。
您需要做的第二件事是告诉表视图在编辑器的高度更改时刷新自己。我不知道TTTextEditor是如何工作的,但是你可以通过实现其委托的-textViewDidChange:
方法来检查UITextView。一旦你知道编辑器的高度已经改变,只需调用表视图的-reloadData
方法 - 这应该适当地调整表的高度。