如何在调用viewDidLayoutSubviews后触发tableView heightForRowAtIndexPath?

时间:2014-10-15 11:10:07

标签: ios uitableview layoutsubviews

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

我尝试了setNeedsLayout,但它不起作用,系统不会调用heightForRowAtIndexPath方法。

reloadDatareloadRowsAtIndexPaths不是一个好选择,因为它会重新加载所有单元格,以及内置到单元格中的所有viewControllers,以及当viewController完成布局过程和{{1}时调用时,viewDidLayoutSubviews将再次调用,因此它是一个无限循环。

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

2 个答案:

答案 0 :(得分:0)

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

setNeedsLayoutUIView的方法,会导致视图重绘,但不会触发tableView更新自身。

答案 1 :(得分:0)

您可以在UIView中测试setNeedsDisplay,这将重绘视图。但setNeedsLayout用于布局子视图(位置和大小)。如果重绘,大小将从委托的功能中获得。

setNeedsLayout and setNeedsDisplay