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

问题描述 投票:16回答:4

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

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

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

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

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

iphone cocoa-touch
4个回答
2
投票

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

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

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

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


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);
}

0
投票

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

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


-1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.