如何在特定视图控制器中强制屏幕方向?

时间:2008-11-24 14:58:47

标签: iphone cocoa-touch

我的应用程序非常简单:它启动了一个视图控制器,它包含一些表视图(在分组视图布局中),并带有几个选项。当用户点击其中一个选项时,我将另一个视图控制器推到我的导航控制器上。

第二个视图控制器只显示UIImageView,用户可以在纵向/横向模式之间更改此视图控制器上的屏幕方向。这很好用,一切都很开心。

但是,如果用户在横向模式下点击导航栏上的“后退”按钮,则第一个控制器的布局全部搞砸了。请参阅下面的截屏前/后:

before
(来源:pessoal.org
 after
(来源:pessoal.org

有关如何强制第一个视图控制器(本文中的第二个屏幕截图)保持在纵向屏幕方向内的任何线索?

4 个答案:

答案 0 :(得分:2)

使用记录的方法似乎没有办法做到这一点。

我已为此提交了一个错误:rdar:// 6399924

“无法始终将UIViewController限制为一个方向”

您可以在开放式雷达上看到它(以及示例代码的链接以重现问题):http://openradar.appspot.com/radar?id=697

答案 1 :(得分:0)

就像开放式雷达上建议的人一样,解决方法是在非肖像时禁用“后退”按钮:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{
    // don't let user press "back" button in landscape - otherwise previous view and the rest of the application
    // will also be in landscape which we did not feel like testing yet
    self.navigationController.navigationBarHidden = (UIInterfaceOrientationPortrait != self.interfaceOrientation);
}

答案 2 :(得分:0)

有一个解决方案:使用视图控制器并将其视图添加到窗口。然后在那个控制器中你强制在shouldAutorotate ...方法中的风景。它工作正常,但要确保你的项目有必要使用它,因为迫使用户转动他的iPhone并不是很聪明。顺便说一下,如果需要,这是一个示例代码。

http://www.geckogeek.fr/iphone-forcer-le-mode-landscape-ou-portrait-en-cours-dexecution.html

答案 3 :(得分:-1)

我无法按照我想要的方式工作。你应该能够为ViewController设置一个特定的方向,但是NavigationController似乎并不总能做正确的事。

我开始重新设计我的屏幕,以便它们都可以在任何方向上工作。这可能是额外的工作,但无论如何它“感觉”更自然。