iOS禁用横向LaunchScreen.storyboard

Posted

技术标签:

【中文标题】iOS禁用横向LaunchScreen.storyboard【英文标题】:iOS Disabling Landscape LaunchScreen.storyboard 【发布时间】:2018-06-08 08:03:29 【问题描述】:

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

我想要的是启动屏幕总是纵向显示。因此,在应用启动期间将手机保持为横向应该会导致看到徽标旋转(就像查看不支持横向的视图控制器一样)

有没有办法让故事板仅是纵向的?

我尝试使用尺寸等级特征,但这样我只能处理左或右景观。由于还为初次使用的用户提供了一个介绍屏幕,可从启动屏幕为徽标设置动画,因此徽标旋转取决于手机横向放置的方向。

【问题讨论】:

参考这个堆栈帖子:***.com/questions/28938660/… 【参考方案1】:

有几种方法可以实现这一点。我更喜欢的是在 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

【讨论】:

它不适合我。【参考方案2】:

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

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

您可以在 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")
    


【讨论】:

viedDidLoad 不会在 LaunchScreen VC 中调用,并且也无法提供自定义类。当操作系统显示故事板时,应用程序未运行 将应用程序置于纵向模式不起作用,因为那时您不能拥有任何支持横向的视图控制器。

以上是关于iOS禁用横向LaunchScreen.storyboard的主要内容,如果未能解决你的问题,请参考以下文章

在 IOS5 中禁用横向方向

出现弹出窗口时,iOS 8 中禁用 UISplitViewController 纵向到横向旋转

如何普遍禁用横向?

Flutter如何禁用横向?

h5页面在手机端禁用横向滚动

如何禁用旋转到横向模式? [复制]