【问题标题】:How to trigger tableView's heightForRowAtIndexPath after viewDidLayoutSubviews get called?调用viewDidLayoutSubviews后如何触发tableView的heightForRowAtIndexPath?
【发布时间】:2014-10-15 11:10:06
【问题描述】:

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

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

reloadDatareloadRowsAtIndexPaths 不是很好的选择,因为它会重新加载所有单元格,并且所有视图控制器都内置到单元格中,并且当视图控制器完成布局过程并调用viewDidLayoutSubviews 时,@987654329 @ 将再次调用,所以它是一个无限循环。

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

【问题讨论】:

    标签: ios uitableview layoutsubviews


    【解决方案1】:

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

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

    【讨论】:

    • 如果您只想更新某些单元格,您可以使用(void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation。但是如果你想改变你的行的高度,你必须调用其中任何一个......:/
    • 你能显示一些代码吗,也许这会有所帮助。如果您通过调用reloadData 在无限循环中运行,听起来您的代码在某处可能存在问题,也许我可以帮忙:)
    【解决方案2】:

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

    setNeedsLayout and setNeedsDisplay

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      • 2013-05-28
      相关资源
      最近更新 更多