为什么我的观点不会轮换?

时间:2011-09-07 17:05:00

标签: ios ipad uitabbarcontroller orientation uiinterfaceorientation

我有一个iPad标签栏应用程序,使用基本标签栏模板创建。我添加了一些自定义视图控制器(每个选项卡一个,每个都有相应的NIB)以及一些带有NIB的额外视图控制器,可用作模态视图。在旋转设备之前,一切都很顺利。

我的应用只支持纵向方向,所以我在所有视图控制器中都有这个:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIDeviceOrientationLandscapeLeft) &&
    (interfaceOrientation != UIDeviceOrientationLandscapeRight);
}

然而,当翻转时,应用程序不会在模拟器或设备中旋转。我检查了所有视图控制器都有上面的代码。

我查看了所有的NIB,并检查了他们都勾选了“轮换子视图”。除了在标签视图中显示它们所需的基本内容之外,我还没有更改默认设置中的任何NIB设置。

我尝试将所有视图控制器中的代码更改为:

- (BOOL)shouldAutorotateToInterfaceOrientation(UIInterfaceOrientation)interfaceOrientation
{
    return UIInterfaceOrientationIsPortrait(interfaceOrientation);
}

没有任何区别。我已经完全确定所有视图控制器中都使用了相同的方法。我不知道还能做些什么。我看不出为什么它不应该旋转到倒置视图。

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

知道了!我的一个视图控制器没有连接到IB中的相关选项卡。由于我还没有添加图像或为该视图控制器编写代码,我没有注意到它在IB中没有关联。我已经完成了shouldAutorotateToInterfaceOrientation方法,但似乎在IB中建立连接之前没有生效。

非常感谢您对此提出的建议。这是一个非常令人沮丧的问题,现在处理了!

答案 1 :(得分:1)

此外,这是Apple的非常有用指南:http://developer.apple.com/library/ios/#qa/qa1688/_index.html

在我的情况下 - 我忘了调用self = [super initWithNibName ....]!

答案 2 :(得分:0)

“所有视图控制器”是否包含标签栏控制器?

在标签栏应用中,根本就是shouldAutoRotateToInterfaceOrientation被调用和评估的唯一视图控制器。

答案 3 :(得分:0)

您拥有的第一个代码段在逻辑上是不正确的:

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation
{
    return (orientation != UIDeviceOrientationLandscapeLeft) &&
           (orientation != UIDeviceOrientationLandscapeRight);
}

此处,orientationUIInterfaceOrientation的实例,而UIDeviceOrientationLandscapeLeftUIDeviceOrientation的实例。两者的类型不同,因此不应进行比较。

相反,您应该使用UIInterfaceOrientation选项:

typedef enum {
  UIInterfaceOrientationPortrait           = UIDeviceOrientationPortrait,
  UIInterfaceOrientationPortraitUpsideDown = UIDeviceOrientationPortraitUpsideDown,
  UIInterfaceOrientationLandscapeLeft      = UIDeviceOrientationLandscapeLeft,
  UIInterfaceOrientationLandscapeRight     = UIDeviceOrientationLandscapeRight
} UIInterfaceOrientation;

将方法更改为

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orientation
{
    return (orientation == UIInterfaceOrientationLandscapeLeft ||
           orientation == UIInterfaceOrientationLandscapeRight);
}

(在肯定而非否定时,代码对我来说更具可读性)