36

我正在制作一个 iPhone 应用程序,我需要它处于纵向模式,所以如果用户将设备横向移动,它不会自动旋转。我怎样才能做到这一点?

4

10 回答 10

56

要禁用特定视图控制器的方向,您现在应该覆盖supportedInterfaceOrientationspreferredInterfaceOrientationForPresentation

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    // Return a bitmask of supported orientations. If you need more,
    // use bitwise or (see the commented return).
    return UIInterfaceOrientationMaskPortrait;
    // return UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    // Return the orientation you'd prefer - this is what it launches to. The
    // user can still rotate. You don't have to implement this method, in which
    // case it launches in the current orientation
    return UIInterfaceOrientationPortrait;
}

如果您的目标是 iOS 6 之前的版本,则需要该shouldAutorotateToInterfaceOrientation:方法。通过更改它何时返回是,您将确定它是否会旋转到所述方向。这将只允许正常的纵向方向。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
    
    // Use this to allow upside down as well
    //return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
}

请注意,shouldAutorotateToInterfaceOrientation:在 iOS 6.0 中已弃用

于 2012-08-02T20:55:04.110 回答
41

Xcode 5 及以上

  • 在左侧栏中的 Project Navigator 中单击您的项目以打开项目设置
  • 转到常规选项卡。
  • 在“设备方向”下的“部署信息”部分取消选中您不需要的选项

显示点击位置的屏幕截图

于 2014-06-13T12:45:20.143 回答
28

Xcode 4 及以下

对于那些错过它的人:您可以使用项目设置屏幕来修复整个应用程序的方向(无需覆盖每个控制器中的方法):

在此处输入图像描述

就像切换支持的界面方向一样简单。您可以通过单击左侧面板中的项目 > 应用程序目标 > 摘要选项卡来找到。

于 2013-08-17T15:25:28.767 回答
9

适用于 iPhone 和 iPad(通用)的最简单的解决方案 - 它删除了info.plist文件或Project -> Info -> Custom iOS Target Properties中不必要的方向。

只需从列表中添加或删除方向项:

  • iPhone支持的界面方向
  • iPad 支持的界面方向 ( iPad )

在此处输入图像描述

于 2019-08-22T08:21:01.110 回答
3

如果您想禁用iPhone 和 iPad的横向显示。

转到目标并转到常规选项卡。请参阅下面的屏幕并取消选择横向左和横向右

在此处输入图像描述

在这种情况下,只有 iPhone 横向模式将被禁用,而不是 iPad。对于 iPad,所有模式都已启用。如果您想从 Universal 到 iPad 选择设备选项。它看起来像这样。请参见下面的屏幕。

在此处输入图像描述

现在您需要取消选择除iPad肖像之外的所有模式。请参见下面的屏幕截图。

在此处输入图像描述

现在您成功地为所有设备禁用了除 Portrait 之外的所有模式。

于 2018-11-10T05:39:35.737 回答
1

Swift 3 如果你有一个导航控制器,像这样子类化它(仅用于纵向):

class CustomNavigationViewController: UINavigationController {

  override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
    return UIInterfaceOrientationMask.portrait
  }

  override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
    return UIInterfaceOrientation.portrait
  }
}
于 2017-03-23T09:46:42.823 回答
0

shouldAutorotateToInterfaceOrientation从您的课程中完全删除该方法也可以。如果您不打算轮换,那么在您的类中使用该方法是没有意义的,代码越少越好,保持清洁。

于 2012-08-03T01:58:47.797 回答
0

Xcode 8、Xcode 9、Xcode 10 及更高版本

在此处输入图像描述

此外,在Info.plist文件中进行更改

在此处输入图像描述

于 2019-04-25T07:00:15.803 回答
0

如果您希望应用程序仅在纵向模式下运行,

在您的viewDidLoad方法下方复制以下代码行

override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
   get {
      return .portrait
   }
}

这将为您的应用程序锁定横向模式。同样,将 .portrait 替换为 .landscape 将以横向模式运行您的应用程序。

如果未指定,您的应用程序将在两种模式下运行。

或者,您可以从 Xcode Builder 锁定方向,如下所示。

在此处输入图像描述

于 2020-10-23T03:31:21.133 回答
0

即使我将设备方向设置为仅纵向,我在 Xcode 13.0 上也遇到了同样的问题。

将这两行添加到 Info.plist 解决了我的问题。

信息列表

于 2022-02-04T10:20:34.413 回答