如何在视图控制器层次结构中正确设置 interfaceOrientation 属性?

Posted

技术标签:

【中文标题】如何在视图控制器层次结构中正确设置 interfaceOrientation 属性?【英文标题】:How to get interfaceOrientation property set correctly in view controller hierarchy? 【发布时间】:2011-02-01 23:17:22 【问题描述】:

我有一个自定义视图控制器层次结构。 将子视图控制器添加到自定义父视图控制器中,仅作为子视图。父视图控制器也会在正确的时间调用子视图控制器的-[willRotateToInterfaceOrientation:duration:]-[didRotateFromInterfaceOrientation:]方法。

似乎一切正常,但由于某种原因,interfaceOrientation 属性设置不正确,它始终为UIInterfaceOrientationPortrait

当我旋转到横向时,如何让子视图控制器在interfaceOrientation 中具有正确的值?

【问题讨论】:

【参考方案1】:

我不认为你可以,反正不要使用公共 API。此外,您尝试这样做的事实表明您没有遵循 ios 应用程序的推荐设计。考虑View Controller Programming Guide的建议

注意:如果要将视图层次结构划分为多个子区域并分别管理每个子区域,请使用通用控制器对象(从 NSObject 下降的自定义对象)而不是视图控制器对象来管理每个子区域。然后使用单个视图控制器对象来管理通用控制器对象。

UIViewController 旨在管理整个屏幕的内容。一旦你违反了这个假设,你就会与试图让你的视图按照你期望的那样运行的框架作斗争。

【讨论】:

iPad 上的拆分视图控制器似乎违反了这条规则(拆分视图的部分由成熟的视图控制器管理)。如果您想实现自己的自定义拆分视图控制器怎么办?你不能? 正确的 user102008,现在 Apple 能够实现容器视图控制器,但我们不能对公共 API 做同样的事情。 iOS 5 会改变这一点,但在那之前我会劝阻你不要尝试一次显示多个 UIViewControllers 的视图。请改用通用控制器对象。

以上是关于如何在视图控制器层次结构中正确设置 interfaceOrientation 属性?的主要内容,如果未能解决你的问题,请参考以下文章

收到推送通知时显示视图控制器不起作用,其视图不在窗口层次结构中

如何检查 iOS 中的视图层次结构?

如何从任何其他视图控制器获取具有视图控制器详细信息的视图层次结构?

切换标签栏项目时,UINavigationController 如何将其整个视图控制器表示层次结构保存在内存中?

如何在复杂的视图层次结构中呈现相机

用于设置自动布局约束的 iOS 视图层次结构