iPad上的界面方向有问题

时间:2011-08-08 19:31:50

标签: iphone ipad

我正在为Xcode 4上的iPad应用程序提供帮助。我知道有

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation

如果要支持所有方向,则应返回YES。以前,该应用程序陷入横向模式。我试图改变观点以支持所有方向。所以我改变了该方法的出现,以返回YES而不是仅为YES的LandscapeLeft和LandscapeRight方向。但是,当我尝试这样做时:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
            NSLog(@"%i, %s", self.interfaceOrientation, __FUNCTION__);
}

我总是在控制台中获得3或4个两个横向方向。单击项目图标时,我检查了“摘要”页面,并支持所有设备方向。在.plist文件中,列出了所有方向。还有另一个地方可以设置我可以忽略吗?感谢。

1 个答案:

答案 0 :(得分:0)

使用提供子视图控制器的自定义导航控制器时遇到了同样的问题。在我的例子中,我使用表格视图来显示网格中的项目,我需要我的表格视图单元格根据方向显示不同数量的项目。以下是我发现的工作:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    // we have to use self.view.window.rootViewController.interfaceOrientation because for some reason
    // self.interfaceOrientation isn't updating.  That's what I get for using custom navigation, I guess.
    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
    if (!self.isViewLoaded) {
        return;
    }
    if (self.view.window) {
        if (UIInterfaceOrientationIsPortrait(self.view.window.rootViewController.interfaceOrientation) != UIInterfaceOrientationIsPortrait(fromInterfaceOrientation)) {
            // if we are rotating between portrait and landscape, we'll have to reload the data
            [self.tableView reloadData];
        }
    } else {
        self.needsReloadData = YES;
    }
}

通过从窗口的根视图控制器读取方向,您可以可靠地确定设备的实际方向。不幸的是,如果视图控制器的视图已从当前窗口中删除,self.view.window将返回nil,因此在这种情况下,我必须提出一个标志并在viewDidAppear处理它。