【发布时间】:2011-10-11 11:08:07
【问题描述】:
嗨,我正在准备在主视图的小视图中添加子视图控制器视图 但是 didRotateFromInterfaceOrientation:.没有调用子控制器的,所以我无法对方向的变化进行任何更改
【问题讨论】:
标签: objective-c ipad uiinterfaceorientation addsubview
嗨,我正在准备在主视图的小视图中添加子视图控制器视图 但是 didRotateFromInterfaceOrientation:.没有调用子控制器的,所以我无法对方向的变化进行任何更改
【问题讨论】:
标签: objective-c ipad uiinterfaceorientation addsubview
didRotateFromInterfaceOrientation 仅在您将 childViewController 添加到 parentViewController 时才会被调用(在 childViewController 中):
[parentViewController addChildViewController:childViewController];
请注意,您仍然可以使用属性打开/关闭该行为:
self.automaticallyForwardAppearanceAndRotationMethodsToChildViewControllers
它默认设置为YES,所以在你的情况下你不需要触摸它。 iOS 6.0 后弃用 干杯
【讨论】:
您是否有超过 1 个 UIViewController 同时在屏幕上主动显示其视图? iOS 真的只希望一次在屏幕上出现 1 个属于 UIViewController 的视图。如果超过 1 个,则只有全屏视图的 UIViewController 会调用其方向更改方法。
【讨论】:
我只是想对这个问题进行跟进。在 iOS 8 之后,旋转方法已被弃用,而是在子视图控制器中覆盖 viewWillTransitionToSize()。
注意:此方法似乎需要您按上述方式添加子视图控制器。我使用故事板和 NavigationController 构建了我的测试,并在按下按钮时推送了一个新的视图控制器。
我在这个函数上设置了一个断点,当我使用调试器检查时:self->parentViewController->childViewControllers,childViewControllers 为 nil。
【讨论】:
我遇到了同样的问题。基本上是
didRotateFromInterfaceOrientation:
为根/父视图控制器调用,如果您希望为视图控制器调用此方法,那么它必须是当前根视图控制器的子视图控制器。
[self addChildViewController:YourUIViewController];
【讨论】:
根据 Apple 文档“当可见视图控制器发生旋转时,将在旋转过程中调用 willRotateToInterfaceOrientation:duration:、willAnimateRotationToInterfaceOrientation:duration: 和 didRotateFromInterfaceOrientation: 方法。在调整视图大小后还会调用 viewWillLayoutSubviews 方法由其父级定位。如果发生方向更改时视图控制器不可见,则永远不会调用旋转方法。但是,当视图可见时会调用 viewWillLayoutSubviews 方法。您的此方法的实现可以调用 statusBarOrientation 方法确定设备方向。”
但实际上,即使视图可见,由于某种原因(可能是因为视图没有占据全屏?),相应的视图控制器的旋转相关委托方法也不会被调用。 在某些情况下,覆盖 -viewWillLayoutSubviews 可能是一种解决方法。
【讨论】:
这是控制器的寿命问题。我怀疑您实例化了控制器并添加了子视图然后释放了实例。现在,如果您正在旋转设备,则不会调用添加的子视图旋转委托方法。
第二个原因是每当您添加子视图时,只会调用父视图委托,因为调用者只有父视图控制器的实例。调用者可能是导航控制器(基于导航的应用程序)、选项卡控制器(在基于选项卡的应用程序的情况下)。如果你想在轮换中调用 subview 方法,你需要像下面这样显式调用它:
if(subviewController != nil){
if([subviewController respondToSelector(rotateMethodOfSubView:)])
[subViewController performSelector(rotateMethodOfSubView:) withObject: self];
}
这应该有助于解决问题。
【讨论】: