2

快速问题:

我有一个带有 2 个导航控制器的 UITabBarController [让我们称它们为左右控制器]

在默认选择的左控制器上,我可以推送一个检测界面方向的新视图控制器。

在右侧控制器上,我可以推送相同的视图控制器,但它不会检测界面方向,或者就此而言,它甚至根本不会进入 shouldAutoRotateInterface 方法 T___T

哈尔普!!

如果它有任何相关性,我正在推动的 View Contoller 使用 hidesBottomBarWhenPushed 属性。

4

3 回答 3

13

很可能这是您的问题:

标签栏控制器默认支持纵向并且不会旋转到横向 ,除非所有的根视图控制器都支持这样的方向。当设备方向发生变化时,标签栏控制器会查询其视图控制器数组。如果其中任何一个不支持方向,则标签栏控制器不会更改其方向。

解决方案是在通向您的视图的每个视图控制器上覆盖以下方法:

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation {
    return YES;
}

例如,代替使用UITabBarControllerIB 中的默认值,将其替换为您自己的仅包含上述方法的子类。

于 2010-09-29T04:56:07.343 回答
8

我参加这个聚会有点晚了,但是我在启动时遇到了一个我希望始终以纵向运行的标签栏应用程序的自动旋转问题。

该应用程序的 plist 具有启动和仅允许纵向模式的必要设置,并且我所有的视图控制器都只允许纵向模式。然而,当我拿着我的 iPhone 横向启动应用程序时,该应用程序以纵向开始,但随后旋转为横向!

而不是子类UITabBarController,我只是使用类上的一个类别来覆盖UITabBarController'sshouldAutorotateToInterfaceOrientation:方法UITabBarController。我将此代码包含在我的应用程序委托中:

@implementation UITabBarController(UITabBarControllerCategory)

-(BOOL)shouldAutorotateToInterfaceOrientation:
                 (UIInterfaceOrientation)toInterfaceOrientation
{
    return (toInterfaceOrientation == UIInterfaceOrientationPortrait);
}

@end

工作精美,而且非常轻巧。

于 2011-02-25T20:54:52.000 回答
0

您的 uitabbar 控制器是否实现了自动旋转?任何想要实现自动旋转的子视图控制器都必须让其父视图控制器实现自动旋转。

于 2010-08-06T16:25:16.873 回答