我的应用程序有四个选项卡:A、B、C和D。它们UIViewController
由 管理UITabBarController
。该应用程序支持旋转,因此每个视图控制器都返回YES
到shouldAutorotateToInterfaceOrientation
.
使用弹簧和支柱,大部分旋转由 iOS 自动完成。但是,tab A也需要进一步定位,在其 VC 的willRotateToInterfaceOrientation
方法中完成。
When the VC for tab A is selected and the screen is rotated, that VC receives a willRotateToInterfaceOrientation
message (propagated by iOS from UITabBarController
), and the resulting rotation is correct.
但是,当所选选项卡为B并且屏幕旋转时,不调用willRotateToInterfaceOrientation
屏幕。说得通。但是,如果我随后选择选项卡A,我只会得到应用其弹簧和支柱的结果,而没有其willRotateToInterfaceOrientation
.
在为此苦苦挣扎了一段时间后,在网上找不到解决方案后,我想出了以下方法。我进行了子类化UITabBarController
,并在其中willRotateToInterfaceOrientation
调用了所有 VC,willRotateToInterfaceOrientation
无论哪一个是selectedViewController
:
- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
if (self.viewControllers != nil) {
for (UIViewController *v in self.viewControllers)
[v willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
}
}
它有效,但它看起来像一个黑客,我的问题是我是否做对了。有没有办法告诉 iOSwillRotateToInterfaceOrientation
在屏幕旋转后第一次显示之前总是调用 VC?