锁定方向在 ipad ios 8 swift xcode 6.2 上不起作用

Posted

技术标签:

【中文标题】锁定方向在 ipad ios 8 swift xcode 6.2 上不起作用【英文标题】:locking orientation does not work on ipad ios 8 swift xcode 6.2 【发布时间】:2015-05-24 23:04:31 【问题描述】:

我像这样将应用程序方向从一般应用程序设置锁定为纵向

但是当我在 ipad 上运行我的应用程序时,它还是会旋转!?

那么我应该在哪里锁定方向?

为什么苹果在设置中添加了这个功能,而它却不起作用!?

更新:

我也尝试将此 viewController 实现为所有 viewController 的通用。

import Foundation
import UIKit

class GeneralViewController: UIViewController 

    override func viewDidAppear(animated: Bool) 
        super.viewDidAppear(animated)
        let value = UIInterfaceOrientation.Portrait.rawValue
        UIDevice.currentDevice().setValue(value, forKey: "orientation")
    

    override func supportedInterfaceOrientations() -> Int 
        return Int(UIInterfaceOrientationMask.Portrait.rawValue)
    


    override func preferredInterfaceOrientationForPresentation() -> UIInterfaceOrientation 
        return UIInterfaceOrientation.Portrait
    

    override func shouldAutorotate() -> Bool 
        return false
    

这张图片取自我应用的主导航控制器。

还是不行!

这东西到底是怎么工作的?

【问题讨论】:

【参考方案1】:

您不需要额外的代码,我正在开发 Xcode 7.0.1,我注意到当我将屏幕方向锁定为仅纵向时,它仅锁定在 iPhone 中,也锁定在 iPad 中,您需要选择iPad从设备(而不是通用)并检查纵向并取消选中其他,然后再次将设备返回通用,因为我发现通用只反映在iPhone中,它可能是Xcode中的某种错误。

【讨论】:

绝对好的答案。我们怎么会知道呢? :D。这是一个很好的发现。 我对此赞不绝口。我正在努力解决这个问题。 即使在 Xcode 9 中仍然存在同样的困惑!在通用工作之前检查每个设备方向:) tnx 我确实尝试了 ios 11 中的所有内容,这救了我。不是很明显的解决办法,谢谢分享!!! 不敢相信到目前为止它仍然是一个错误(在 Xcode 10.1 上测试)【参考方案2】:

我也有同样的问题。对我有用的是->在设备类型中选择iPad而不是通用->取消选中除纵向之外的其他三个选项->再次选择通用。完成。

【讨论】:

你拯救了我的一天!【参考方案3】:

您可以覆盖您的视图控制器属性shouldAutorotate

override var shouldAutorotate: Bool 
    return false 

如果您的视图控制器嵌入在导航控制器中,您可以创建自定义导航控制器:

class PortraitNavigationController: UINavigationController 

    override var shouldAutorotate: Bool 
        return false 
    
    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 
        // Get the new view controller using segue.destinationViewController.
        // Pass the selected object to the new view controller.
    
    */

【讨论】:

您可以创建一个自定义视图控制器并添加到那里 啊,听起来好多了,我正在检查像代理外观这样的解决方案来更改它一次,它会在整个项目中生效 是嵌入到 Navigation 控制器还是 TabBar 控制器中? 是的,我在某些控制器中使用导航控制器和 tabBar 尝试将支持的界面方向添加到您的导航控制器【参考方案4】:

这将是添加到 Mohammed Elrashidy 解决方案的评论,但我没有制作 cmets 的声誉。我正在使用 XCode 9.1 和 Swift 3。

我的应用需要一些图形屏幕来自动旋转,但所有其他屏幕都保持固定。我的问题是 General > Deployment Info 中的“iPad”设备配置与 iPhone 和 Universal 设备的配置不一致。我检查了 iPhone 和 Universal 的“纵向”、“横向左侧”和“横向右侧”,但检查了 iPad 的所有方向(包括“倒置”)。简单地取消选中“Upside Down”会导致 iPad 设备遵守我的 Swift 逻辑中的 shouldAutorotate 和 supportedInterfaceOrientations 调用。

我的 Info.plist 现在如下所示,我可以通过编程方式为 iPad 打开或关闭自动旋转。

<key>UISupportedInterfaceOrientations</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
    <string>UIInterfaceOrientationLandscapeLeft</string>
    <string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
    <string>UIInterfaceOrientationLandscapeLeft</string>
    <string>UIInterfaceOrientationLandscapeRight</string>
</array>

【讨论】:

完美解决方案,谢谢!在 plist 中设置它很可能是更好的选择【参考方案5】:

在按照上述解决方案解决问题后,我只是想添加您需要做的其他事情:

在 XCode 中,确保您还选中了 General > Targets 下的“Requires Full Screen”复选框。

参考: iPad Multitasking support requires these orientations

【讨论】:

被低估的评论,在尝试了 10 多个答案之后,这是最终奏效的。还需要向 ViewController 添加代码。 XCode 12.【参考方案6】:

由于 XCode 在这 5 年中发生了很大变化,当我遇到同样的问题时,我找到了一种简单的方法来处理它,即使我将设备方向配置为只允许“纵向”,限制在 iPad 中不起作用设备。

所以在新创建的项目中,需要进入Targets->Info->Custom iOS Target Properties->Supported interface orientations(iPad)。然后删除您不需要的布局,然后这个技巧就会奏效。

【讨论】:

【参考方案7】:

打开 Info.plist,在“支持的界面方向 (iPad)”下删除您不需要的项目。

【讨论】:

以上是关于锁定方向在 ipad ios 8 swift xcode 6.2 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 14 中锁定屏幕方向

在横向模式下锁定 Ipad 应用程序

在 iPad 上锁定 UIViewController 方向

iPad 上的 Cordova 锁定方向失败

如何在 iOS 7 和 iOS 8 中锁定设备方向

如何在 Flutter 中锁定手机屏幕方向? (不在选项卡/ iPad 中)