1

tableViewCell包含 viewController,它的高度是在 tableView 完成视图布局后计算的。所以我需要通过调用方法触发tableView再次请求行高。heightForRowAtIndexPath

我试过setNeedsLayout了,不行,系统不会调用heightForRowAtIndexPath方法。

reloadData或者reloadRowsAtIndexPaths不是很好的选择,因为它会重新加载所有的单元格,并且所有的viewControllers都内置到单元格中,当viewController完成布局过程并被viewDidLayoutSubviews调用时,reloadData 会再次调用,所以它是一个无限循环。

我正在测试tableView.beginUpdates() tableView.endUpdates()空更新操作。有时它会触发heightForRowAtIndexPath,有时不会。

4

2 回答 2

0

您可以在 UIView 中测试 setNeedsDisplay,这将重绘视图。但是 setNeedsLayout 用于布局子视图(位置和大小)。如果重绘,尺寸会从delegate的函数中重新获取。

setNeedsLayout 和 setNeedsDisplay

于 2014-10-15T11:37:46.700 回答
0

heightForRowAtIndexPath:是协议的一部分,UITableViewDelegate并在您执行时被调用: [tableView reloadData];

setNeedsLayout是一种方法UIView并导致视图重绘自身,但它不会触发tableView更新自身。

于 2014-10-15T11:15:23.447 回答