我有一个自定义UITableViewController,它可以检测视图边界的变化,并使用它来更新每个tableviewcell显示的缩略图数量。但是,当我将tableView嵌入到另一个视图中时,边界不会改变,尽管我可以直观地确认它已调整大小。
我使用KVO来检测视图边界何时发生变化。从我自定义的TableViewController里面的viewDidLoad方法:
[self.view addObserver:self forKeyPath:@"frame" options:0 context:nil];
如果我将tableViewController作为应用程序的根视图控制器并旋转iPad,则每次旋转都会更新边界,并且完全正常。
然而,我的tableview嵌入在另一个视图控制器的nib中,边界永远不会更新 - 帧也不会。尽管如此,我可以看到tableview本身在旋转进入/退出横向模式时正确调整大小 - 因此在应用程序的某个地方,真实的框架/边界正在发生变化,而且只是没有被报告。知道如何才能访问真正发生的事情吗?
答案 0 :(得分:10)
比KVO更好的解决方案是在视图控制器中实现viewDidLayoutSubviews
。布局完成后,将在所有边界更改上调用此方法。
答案 1 :(得分:1)
事实证明,在界面构建器文件中,tableview已经丢失了它作为tableViewController视图的引用插座。添加此功能解决了这个问题!