3

我被困住了。我有一个稍微复杂的视图层次结构。一个 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没有被调用。还是有些奇怪。

4

1 回答 1

0

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

检查代码:

- (void)viewWillLayoutSubviews {
    [super viewWillLayoutSubviews];
}
于 2014-03-20T14:55:19.433 回答