【发布时间】:2015-07-18 11:35:13
【问题描述】:
我有一个 UITableView,它的单元格动态调整大小以适应其中的 UITextView。每当键入一个键时,单元格都会检查计算的高度是否增加,就像换行一样,因此它可以告诉表格单元格的高度需要重新计算。我用这段代码做到这一点。
- (void) createNoteCellViewDidUpdate: (CreateNoteCell*) cell {
CGFloat newHeight = [self tableView:self.tableView heightForRowAtIndexPath:CreateNoteCellIndexPath];
if (newHeight != CGRectGetHeight(cell.contentView.frame)) {
[self.tableView beginUpdates];
[self.tableView endUpdates]; // <- HERE IS WHERE THE CONTENT OFFSET CHANGES
}
}
调整大小和表格边界符合预期。但是,它不仅会为高度变化设置动画,还可以滚动到顶部。这可以在这里看到,当按下返回键时。
通过键值观察,我发现当滚动视图的 contentSize 发生变化时,滚动视图的 contentOffset 正在设置。并且在调用 endUpdates 方法时 contentSize 会发生多次变化。当它改变时,它会从正常高度变为相当大的高度,然后又回到正常高度。我想知道它是否会因此而达到顶峰。我不知道从这里去哪里。
【问题讨论】:
-
问题 - 为什么要调整表格视图的大小而不是调整单元格的大小?通常,tableview 的框架保持不变,内容会发生变化。
-
不,我没有触及 Table View 框架或边界。我通过告诉表格视图重新计算单元格的所有高度来调整单元格的大小。
标签: ios objective-c uitableview uiscrollview uitextview