我正在开发一个使用了一些视图控制器的应用程序。当我在横向/纵向模式下从一个视图推送到另一个视图并以相同模式移回时,在移回时调用的 shouldAutorotateToInterfaceOrientation 方法。
但是当重复相同的步骤并且在第二个或第三个视图上更改方向并向后移动时,不调用 shouldAutorotateToInterfaceOrientation 方法。并且视图控件受到干扰。
请给出一个相同的解决方案。
谢谢,
我正在开发一个使用了一些视图控制器的应用程序。当我在横向/纵向模式下从一个视图推送到另一个视图并以相同模式移回时,在移回时调用的 shouldAutorotateToInterfaceOrientation 方法。
但是当重复相同的步骤并且在第二个或第三个视图上更改方向并向后移动时,不调用 shouldAutorotateToInterfaceOrientation 方法。并且视图控件受到干扰。
请给出一个相同的解决方案。
谢谢,
如果我正确理解您的问题,您希望在设备方向更改时在 viewControllers 堆栈上的第二个或第三个 viewController 上调用 shouldAutorotateToInterfaceOrientation 。
shouldAutorotateToInterfaceOrientation 仅在顶部 viewController 上调用。如果你在第二个或第三个viewController的方法中做任何布局代码,代码不会被执行。
解决方案很简单,而且很多,具体取决于您的代码。这是一个应该可以工作的(未在 Xcode 中测试过)。在顶层 ViewController 的 shouldAutorotateToInterfaceOrientation 方法中,添加如下内容:
for (UIViewController *vc in [self childViewControllers])
{
[vc shouldAutorotateToInterfaceOrientation];
}
如果你有一个指向特定 childViewController 的指针,你可以专门调用它。
文档中的注释:
此方法的实现应根据 interfaceOrientation 参数中的值简单地返回 YES 或 NO。不要尝试获取 interfaceOrientation 属性的值或检查 UIDevice 类报告的方向值。您的视图控制器要么能够支持给定的方向,要么不能。
要进行任何布局,您可以使用:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
希望这可以帮助!