卡住了。我有一个稍微复杂的视图层次结构。一个UITabBarController来控制三个uinavigationcontroller。在每个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,但我仍然画一个空白。
我已经更新了记录的内容,包括viewWillLayoutSubviews
和viewDidLayoutSubviews
。似乎在自动布局得到它之前,一切都被归零了。这个假设正确吗?
编辑
正确设置内容大小然后将其设置为零的相同模式也发生在我将视图控制器推到顶部时。然后,当我弹出它,它设置适当的内容大小,然后删除它。
我想出了一个变通办法。我缓存我的单元格高度,所以在viewWillLayoutSubviews
我设置适当的内容大小。如果我模态地呈现视图,问题仍然存在,因为没有调用viewWillLayoutSubviews
。还是有点奇怪
你说"和调整一些滚动视图插入后"。请记住,滚动视图的x,y引用不同于主UIWindow (screen)或(UIView) x,y坐标。也可以摆脱自动布局或编程设置框架内容所需的x,y位置,宽度和高度。
检查代码:
- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
}