根 ViewController 内的 UIViewController 不旋转

Posted

技术标签:

【中文标题】根 ViewController 内的 UIViewController 不旋转【英文标题】:UIViewController inside a root ViewController not rotating 【发布时间】:2012-01-19 11:29:08 【问题描述】:

我有一个 UIViewController,我想将它作为一个独立层添加到整个应用程序之上。所以我尝试在应用程序委托中使用 [self.window addSubview:viewController.view] 将它添加到 UIWindow。

但是,当用户旋转设备时,我的视图控制器中没有收到 willRotateToInterfaceOrientation 事件。所以我尝试按照here 的建议进行操作:我将我的视图控制器添加为应用程序委托中窗口的根视图控制器的子视图,但我的 willRotateToInterfaceOrientation 仍然没有被调用。

我该怎么办?

【问题讨论】:

【参考方案1】:

您的 rootViewController 充当容器视图控制器。

ios 5.0 及更高版本中,自定义 UIViewController 子类现在可以充当容器视图控制器。 UINavigationController 和 UITabBarController 类是 UIKit 提供的容器视图控制器的示例。容器视图控制器背后的想法是它管理来自其包含的视图控制器的内容的呈现,也称为其子视图控制器。子内容可以按原样呈现,也可以与容器视图控制器管理的其他自定义视图一起呈现。

您正在做的是实现自己的视图层次结构,因此您负责沿着该层次结构向下传递 UILifecycle-Events。 iOS >= 5.0 支持您创建这样的容器视图控制器,提供

- (void)addChildViewController:(UIViewController *)childController
- (BOOL)automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers

方法(以及更多)。对于 iOS

【讨论】:

【参考方案2】:

在您的 rootViewController 中,您应该持有对 IndependentLayerController 的引用并转发 willRotateToInterfaceOrientation。

您的 rootViewController 将收到消息,您可以在 IndependentLayerController 上调用 willRotateToInterfaceOrientation。

【讨论】:

没有办法让这一切自动发生吗?我想创建一个不依赖于父视图控制器的层,其中将隐式调用 willRotate 据我了解,这是您的任务。没有在所有 UIViewController 上全局调用的事件。这随着 iOS 5 的变化而变化,看看我的下一个答案。

以上是关于根 ViewController 内的 UIViewController 不旋转的主要内容,如果未能解决你的问题,请参考以下文章

iOS ChildViewController使用示例

从 NavigationController 中移除 ViewController 后 AVPlayer 继续播放

如何从使用的 viewController 弹回根 ViewController?

pushViewController 不是根 viewController

如果 ViewController 包含作为根的 TableView,如何将 ViewController 添加到导航控制器? [关闭]

ViewController 内的 UICollectionView