单视图控制器 swift 5 中的方向支持

Posted

技术标签:

【中文标题】单视图控制器 swift 5 中的方向支持【英文标题】:Orientation support in single view controller swift 5 【发布时间】:2019-06-03 04:47:51 【问题描述】:

我需要在单视图控制器中支持方向

我尝试但没有成功。现在在整个应用程序中定位。

override func viewDidLoad() 
    super.viewDidLoad()

    self.lockOrientation()


func lockOrientation() 
    let orientationValue = UIInterfaceOrientation.portrait.rawValue
    UIDevice.current.setValue(orientationValue, forKey: "orientation")


override var shouldAutorotate: Bool 
    return false


override var supportedInterfaceOrientations: UIInterfaceOrientationMask 
    return .portrait


override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation 
    return .portrait

【问题讨论】:

UIDevice 行是个坏主意。这是一场等待发生的崩溃。 @rmaddy 感谢您的评论,您能否提供运行良好的示例代码,您有什么解决方案吗? 在这里查看我的答案***.com/questions/42665450/… How to lock orientation of one view controller to portrait mode only in Swift的可能重复 【参考方案1】:

将以下代码放入AppDelegate

仅在项目常规设置中将设备方向保留为纵向

var restrictRotation: Bool = true

func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask 
    if restrictRotation 
        return .portrait
     else 
        return .all
    

将您想要允许/禁用方向的代码放在下面。

override func viewWillAppear(_ animated: Bool) 
    super.viewWillAppear(animated)
    self.restrictRotation(false) //TRUE TO RESTRICT ORIENTATION && FALSE TO ALLOW ORIENTATION


func restrictRotation(_ restriction: Bool) 
    let appDelegate = UIApplication.shared.delegate as? AppDelegate
    appDelegate?.restrictRotation = restriction

【讨论】:

【参考方案2】:

问题已通过bmjohns 回答解决 请访问并检查。

@bmjohns 回答更新版本

斯威夫特 5

// set orientations you want to be allowed in this property by default
var orientationLock = UIInterfaceOrientationMask.all

func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask 
        self.lockOrientation()
        return true


func unlockOriention () 
    self.orientationLock = .all


func lockOrientation() 
    self.orientationLock = .portrait

SecondViewController.swift

同时支持方向

override func viewDidLoad() 
        super.viewDidLoad()
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        appDelegate.unlockOriention()
    

【讨论】:

以上是关于单视图控制器 swift 5 中的方向支持的主要内容,如果未能解决你的问题,请参考以下文章

我需要帮助使用 Swift 在视图控制器中创建两个单选按钮

xCode swift Storyboard 单视图控制器,内部有多个/动态视图

如何全局检测 swift 文件之外的设备活动方向变化?

我应该为我的视图控制器使用单例吗?

更改 iPhone 中的方向时如何更改视图控制器的视图?

从另一个视图控制器单击 uitableviewcell 后,swift 3 更改 uitableviewcell?