UITextView在UITableView中,使用AutoLayout平滑展开

时间:2013-06-01 19:24:36

标签: ios objective-c uitableview uitextview autolayout

每个UITextView都有一个可编辑的UITableViewCell

UITextViews调整预加载文本的大小(通过heightForRowAtIndexPath计算),但我不确定如何动态添加文本时使用AutoLayout进行平滑调整大小。它似乎被切断了。

使用AutoLayout,如何平滑调整UITableViewCellUITextView的大小以使输入的文字适合UITextView

2 个答案:

答案 0 :(得分:7)

已接受的答案是已弃用的答案,在iOS 8 sdk中有一个干净的解决方案

在viewDidLoad中,告诉tableView自动计算行高:

tableView.estimatedRowHeight = 44.0f;
tableView.rowHeight = UITableViewAutomaticDimension;

实现UITextViewDelegate协议的textViewDidChange:方法,并告诉tableView每次编辑文本时重绘自己:

- (void)textViewDidChange:(UITextView *)textView {
[tableView beginUpdates];
[tableView endUpdates];
}

不要忘记在Storyboard / IB或tableView中设置UITextView委托:cellForRowAtIndexPath:

答案 1 :(得分:3)

你做不到。表格视图单元格不会通过布局约束来获取其高度,而是通过委托方法tableView:heightForRowAtIndexPath:来获取。

你可能会达到这样的效果:

  • 将文字视图固定在单元格内容视图的顶部和底部
  • 在文本视图上委托方法,重新计算输入的文本大小
  • 如果需要更改尺寸,请在模型中的任何位置更新存储的高度
  • 在表格视图中调用beginUpdatesendUpdates。这将导致它重新查询高度,并为新大小设置动画(通过扩展,调整文本视图的大小)。