iOS 禁用景观 LaunchScreen.storyboard

iOS Disabling Landscape LaunchScreen.storyboard

我有一个显示徽标的 LaunchScreen.storybaord(文本,因此它与方向无关)。该应用程序始终以纵向模式启动,但它具有某些允许横向模式的视图控制器(因此无法将应用程序设为仅纵向模式)。

我想要的是启动屏幕始终以纵向显示。因此,在应用程序启动期间横向按住 phone 应该会导致看到徽标旋转(就像查看不支持横向的视图控制器一样)

有没有办法让故事板只显示肖像?

我尝试使用大小 类 特征,但这样我只能处理左或右横向。由于还有一个介绍屏幕供初次使用的用户从启动屏幕动画徽标,因此徽标旋转取决于 phone 横向放置的方向。

有几种方法可以实现这一点。不过,我更喜欢在 Info.plist

中指定
<key>UISupportedInterfaceOrientations</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
</array>

并在应用程序在 AppDelegate 中完成启动后覆盖它

func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
    return [.allButUpsideDown]
}

来源:https://developer.apple.com/library/archive/technotes/tn2244/_index.html#//apple_ref/doc/uid/DTS40009012-CH1-ALLOWING_YOUR_APP_TO_ROTATE_INTO_PORTRAIT_ORIENTATION_AFTER_LAUNCH

单击项目导航器,然后单击目标 -> select 项目 > 单击常规 -> 部署信息然后您将看到下面的视图

在此处检查您在项目创建期间检查的设备方向并标记您想要的方向。它会起作用。

您可以在 ViewDidLoad 中使用以下代码:

NotificationCenter.default.addObserver(self, selector: #selector(orientationChanged), name:  Notification.Name("UIDeviceOrientationDidChangeNotification"), object: nil)

然后,创建一个如下所示的函数

@objc func orientationChanged() {

    if(UIDeviceOrientationIsLandscape(UIDevice.current.orientation)){

        print("landscape")
    }

    if(UIDeviceOrientationIsPortrait(UIDevice.current.orientation)){

        print("Portrait")
    }

}