只有一个查看横向模式

我完成了我的iOS应用程序,但我只需要设置一个视图到横向模式,剩下的视图只能在纵向模式下看到。

我正在使用Xcode 5.1,并通过从右侧面板放置在Storyboard View Controller中创build了所有的视图,所以如果您要告诉我在某处编写一些代码,请告诉我在哪里需要编写代码。

我在这里阅读一个解决schemeUINavigationController强制旋转,但我不知道在哪里写代码。 我需要手动创build一个UIViewController吗?

我会假设你在这里瞄准iOS 7(使用XCode 5.1,我想我是对的)。

首先,你必须明白,为了打开40多个景观中的一个,你的应用应该允许横向和纵向的界面方向。 这是默认情况下,但您可以在您的目标的设置, General选项卡, Deployment Info部分检查它(见下面的截图)。

在这里输入图像描述

然后,因为您允许横向和纵向整个应用程序,你将不得不告诉每个只有肖像的UIViewController ,它不应该自动旋转,添加此方法的实现:

 - (BOOL)shouldAutorotate { return NO; } 

最后,对于您的特定于横向的控制器,并且因为您说您正在以模态方式呈现它,您可以只实现这些方法:

 - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { return UIInterfaceOrientationLandscapeLeft; // or Right of course } - (UIInterfaceOrientationMask)supportedInterfaceOrientations { return UIInterfaceOrientationMaskLandscape; } 

希望这会有所帮助,

迅速

AppDelegate.swift

 internal var shouldRotate = false func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { return shouldRotate ? .allButUpsideDown : .portrait } 

你的风景视图控制器

 let appDelegate = UIApplication.shared.delegate as! AppDelegate appDelegate.shouldRotate = true // or false to disable rotation 

Objective-C的

AppDelegate.h

@property (assign, nonatomic) BOOL shouldRotate;

AppDelegate.m

 - (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { return self.shouldRotate ? UIInterfaceOrientationMaskAllButUpsideDown : UIInterfaceOrientationMaskPortrait; } 

你的风景视图控制器

 AppDelegate *appDelegate = [UIApplication sharedApplication].delegate; [appDelegate setShouldRotate:YES]; // or NO to disable rotation 

你应该宣布shouldRotate作为内部摆脱公共财产在没有公共类警告。 internal var shouldRotate = false

要跟踪雅罗斯拉夫的解决scheme,为了只允许在一个视图中旋转到横向模式,横向视图控制器应该在其viewDidLoad方法中将shouldRotate设置为YES,并在其viewWillDisappear中将其设置为YES。

如果您只在viewDidLoad中将“设置旋转”设置为“是”,则在现有此视图控制器之后,所有其他视图控制器也将旋转。 所以,你必须在其viewWillDisappear中将其设置为NO才能限制纵向视图的旋转。