如何检测自动调整大小何时更改视图的边界

时间:2012-11-18 08:16:33

标签: ios rotation key-value-observing

我有一个自定义UITableViewController,它可以检测视图边界的变化,并使用它来更新每个tableviewcell显示的缩略图数量。但是,当我将tableView嵌入到另一个视图中时,边界不会改变,尽管我可以直观地确认它已调整大小。

我使用KVO来检测视图边界何时发生变化。从我自定义的TableViewController里面的viewDidLoad方法:

[self.view addObserver:self forKeyPath:@"frame" options:0 context:nil];

如果我将tableViewController作为应用程序的根视图控制器并旋转iPad,则每次旋转都会更新边界,并且完全正常。

然而,我的tableview嵌入在另一个视图控制器的nib中,边界永远不会更新 - 帧也不会。尽管如此,我可以看到tableview本身在旋转进入/退出横向模式时正确调整大小 - 因此在应用程序的某个地方,真实的框架/边界正在发生变化,而且只是没有被报告。知道如何才能访问真正发生的事情吗?

2 个答案:

答案 0 :(得分:10)

比KVO更好的解决方案是在视图控制器中实现viewDidLayoutSubviews。布局完成后,将在所有边界更改上调用此方法。

答案 1 :(得分:1)

事实证明,在界面构建器文件中,tableview已经丢失了它作为tableViewController视图的引用插座。添加此功能解决了这个问题!