我创建了一个自定义的TabBarController,它继承自UIViewController(NOT UITabBarController,因为它不用于子类化)。除了方向支持外,一切正常。
我的TabBarController在我的UIWindow上设置为rootViewController,包含一个UIViewControllers的内部数组。在我的例子中,我添加了UINavigationControllers作为每个选项卡的根目录。
当我将新的UIViewController推送到我的TabBarController中的任何UINavigationControllers时,我得到了对shouldAutorotateToInterfaceOrientation的调用,这很好,因为在这里我可以设置哪个UIViewController应该支持哪个方向(如Apple文档中所述)。
然而,当我按下UINavigationBar中的后退按钮返回时,我没有调用shouldAutorotateToInterfaceOrientation,因此我们显示的视图将以错误的方向结束。
我通过用UITabBarController替换我的自定义TabBarController进行了快速测试,当按下后退按钮时我接到了对shouldAutorotateToInterfaceOrientation的调用,所以这里肯定有问题,但我无法弄清楚是什么。
为什么我不接到对shouldAutorotateToInterfaceOrientation的调用? UITabBarController是否正在做我错过的事情?
这里有人遇到过同样的问题吗?你有任何可能值得尝试的想法,因为我已经没有想法了。
修改
通过使用iOS5容器视图控制器将TabBarController中的每个UIViewController作为子项添加来解决此问题。
使用此方法将UIViewController添加为子项:addChildViewController然后覆盖automaticForwardAppearanceAndRotationMethodsToChildViewControllers并返回YES。
现在你应该在你的UIViewControllers中获得shouldAutorotateToInterfaceOrientation回调
答案 0 :(得分:2)
我以前见过这样的问题,并且始终归结为将-shouldAutorotateToInterfaceOrientation:
方法添加到所有视图控制器,而不仅仅是最重要的一个可能会期待。
(如果你很懒,只需将一个类别添加到UIViewController
)