27

我有一个由许多视图控制器组成的应用程序......在项目摘要中,我已将纵向方向设置为唯一支持的设备方向。

但是,当横向转动时,该应用程序仍然会变得混乱。

我的问题是,有没有办法通过应用程序委托或其他方式全局禁用自动旋转?

还是我必须进入我所有的视图控制器并添加“shouldAutorotateToInterfaceOrientation”方法?

只是不想错过将它添加到一个或什么...

谢谢!

4

7 回答 7

75

在 Info.plist 中展开“支持的界面方向”并删除横向项目,使您的应用程序仅在纵向模式下运行。

于 2012-10-26T12:50:31.377 回答
25

现在有三种设备方向键info.plist

  1. 支持的界面方向 (iPad)
  2. 支持的界面方向 (iPhone)
  3. 支持的界面方向

第三个是我认为用于非通用应用程序的,其余两个是用于 iPad 和 iPhone 的。

你应该试一试。

在此处输入图像描述

于 2015-04-15T07:47:10.443 回答
14

在努力设置 UIViewController 的 shouldAutorotatesupportedInterfaceOrientation方法之后,在 iOS6 中没有成功,我发现最有效的方法是在应用程序委托中设置它。

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    return UIInterfaceOrientationMaskPortrait;
}

但是返回使UIInterfaceOrientationMaskPortraitUpsideDown我的应用程序崩溃。我不知道我做错了什么!

于 2013-03-18T10:16:03.810 回答
5

在根视图控制器的方法中:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

设置“返回否”;

这应该适用于所有视图。

于 2012-04-12T14:02:43.350 回答
2

如果您支持 iPad,那么您不应该取消选中横向,因为它会阻止您的应用在 App Store 上被 Apple 接受。

为了防止在应用程序显示您的第一个屏幕之前旋转,请将其放入您的 AppDelegate.m

此方法在以上 iOS 7.1 中有效并经过测试。

// G - fix for ipad.
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    return UIInterfaceOrientationMaskPortrait;
}
于 2016-04-14T03:33:18.947 回答
0

从 IOS 6 开始,Haris Hussain 的回答现在似乎已被弃用,但有一些新方法可用于限制/启用轮换。

以下是 UIViewController 标头中列出的方法:

// New Autorotation support.
- (BOOL)shouldAutorotate NS_AVAILABLE_IOS(6_0);
- (UIInterfaceOrientationMask)supportedInterfaceOrientations NS_AVAILABLE_IOS(6_0);
// Returns interface orientation masks.
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation NS_AVAILABLE_IOS(6_0);

请注意,如果您在已经旋转的状态下启动应用程序,shouldAutoRotate 似乎不起作用!

于 2015-10-16T09:25:48.380 回答
0

斯威夫特
iOS 6+

shouldAutorotate推荐的方法是在每个附加的视图控制器中覆盖。如果您在根视图控制器中覆盖此属性,则所有“附加”视图控制器也将继承该行为。然而,呈现的视图控制器可能会变得“未附加”到根,因此不会继承覆盖,因此您需要单独覆盖这些视图控制器中的属性。

class RootViewController: UIViewController {
    override var shouldAutorotate: Bool { false }
}

class PresentedViewController: UIViewController {
    override var shouldAutorotate: Bool { false }
}

但是,如果您只是子类UIViewController化并且仅在项目中使用子类化视图控制器,那么您将拥有真正的全局修复(使用代码)。

class NonrotatableViewController: UIViewController {
    override var shouldAutorotate: Bool { false }
}

设置替代(无代码)

也许最全局的修复是在目标设置的信息选项卡中编辑 Info.plist 文件。有一个supported-interface-orientations 键,每个值代表一个支持的方向。删除除纵向之外的所有视图控制器将禁用所有视图控制器中的旋转,无论是否附加到根。

于 2021-11-02T00:42:46.723 回答