我的应用程序非常简单:它启动了一个视图控制器,它包含一些表格视图(在分组视图布局中),有几个选项。当用户点击其中一个选项时,我将另一个视图控制器推到我的导航控制器上。
第二个视图控制器只显示UIImageView,用户可以在纵向/横向模式之间更改此视图控制器上的屏幕方向。这很好用,一切都很开心。
但是,如果用户在横向模式下点击导航栏上的“后退”按钮,则第一个控制器的布局都会混乱。请参阅下面的截屏前/后:
(来源:pessoal.org) (来源:pessoal.org)
有关如何强制第一个视图控制器(本文中的第二个屏幕截图)保持在纵向屏幕方向内的任何线索?
似乎没有办法使用记录的方法来做到这一点。
我已经为此提交了一个错误:rdar:// 6399924
“无法始终将UIViewController限制为一个方向”
您可以在开放式雷达上看到它(以及示例代码的链接以重现问题):http://openradar.appspot.com/radar?id=697
就像开放式雷达上建议的人一样,解决方法是在非肖像时禁用“后退”按钮:
- (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);
}
有一个解决方案:使用视图控制器并将其视图添加到窗口。然后在那个控制器中你强制在shouldAutorotate ...方法中的风景。它工作正常,但要确保你的项目有必要使用它,因为迫使用户转动他的iPhone并不是很聪明。顺便说一下,如果需要,这是一个示例代码。
http://www.geckogeek.fr/iphone-forcer-le-mode-landscape-ou-portrait-en-cours-dexecution.html
我无法按照我想要的方式工作。您应该能够为ViewController设置特定方向,但NavigationController似乎并不总是做正确的事情。
我重新设计了我的屏幕,以便它们都可以在任何方向上工作。这可能是额外的工作,但无论如何它“感觉”更自然。