【问题标题】:What could be causing a tableView's contentSize to be reset什么可能导致 tableView 的 contentSize 被重置
【发布时间】:2014-03-20 14:13:02
【问题描述】:

我被困住了。我有一个稍微复杂的视图层次结构。一个 UITabBarController 来统治三个 UINavigationControllers。在每个 NavigationController 中,我都有一个根 UITableViewController 来生成其他同类。都是子类。昨天一切正常,在调整了一些滚动视图插图并切换到块后,我遇到了问题。

当我将另一个 TableViewController 推送到导航堆栈时,一切正常。但是,当我弹出那个 TableViewController 并记录根 TableViewController 的 contentSize

viewWillAppear           contentSize: {320, 15063.414}
viewWillLayoutSubviews   contentSize: {0, 0}
viewDidLayoutSubviews    contentSize: {0, 0}
viewDidAppear            contentSize: {0, 0}

这只发生在从我的自定义 TableViewController 弹出到另一个同类型的 TableViewController 时。知道发生了什么(大概在viewDidLayoutSubviews)?

我怀疑 TabBarController 或 NavigationController 可能出了点问题,但我仍在画一个空白。

我已将记录的内容更新为包括 viewWillLayoutSubviewsviewDidLayoutSubviews。似乎在 AutoLayout 得到它之前,一切都归零了。这个假设正确吗?

编辑

当我将视图控制器推到顶部时,也会发生正确设置内容大小然后将其设置为零的相同模式。然后当我弹出它时,它会设置正确的 contentSize 然后将其删除。

我想出了一个解决方法。我缓存了我的单元格高度,所以在viewWillLayoutSubviews 中我正确设置了 contentSize。如果我以模态方式呈现视图,问题仍然存在,因为没有调用 viewWillLayoutSubviews。还是有些奇怪。

【问题讨论】:

  • 每当我看到我无法解释的奇怪布局行为时,我都会寻找从主线程以外的线程访问 UI 组件的代码。你说你“切换到块”;也许你在这些块中有 UI 操作代码?
  • 我试图非常小心地让完成块在主线程上执行。不过我会再检查一次。从任何 viewDidSomething 中调用带有完成块的方法是不是很糟糕?
  • 这还不错,但为了安全起见,我总是在块内和接收器内使用 dispatch_async(dispatch_get_main_queue(), ^{}); 样板,我不确定是什么线程在调用它们(例如 NSNotificationCenter 选择器)。
  • 我已经完成了我拥有的所有方法,它们都在主线程上执行。我还删除了所有涉及 scrollViewInsets 和任何自定义弹出动画的代码。还是什么都没有……
  • 虽然设置不同,但我想我有同样的问题:stackoverflow.com/questions/27090751/…。您是否找到了正确解决此问题的方法,或者至少了解了它的原因?我发现对我有用的是将表格的 contentSize 设置在 viewWillLayoutSubviews 内,但感觉不对...

标签: ios uitableview contentsize popviewcontrolleranimated


【解决方案1】:

您说“在调整了一些滚动视图插图之后”。请记住,滚动视图的 x,y 引用不同于主 UIWindow (screen) 或 (UIView) x,y 坐标。同时摆脱 AutoLayout 或以编程方式将框架内容设置为所需的 x、y 位置、宽度和高度。

检查代码:

- (void)viewWillLayoutSubviews {
    [super viewWillLayoutSubviews];
}

【讨论】:

  • tableView 的框架和边界设置得当。只是 contentSize 是 0,0。我不明白我应该在 viewWillLayoutSubviews 中检查什么,我有你写的和一个日志语句。
猜你喜欢
  • 2019-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 2012-05-05
相关资源
最近更新 更多