视图控制器方向没有按预期工作,我错过了啥?

Posted

技术标签:

【中文标题】视图控制器方向没有按预期工作,我错过了啥?【英文标题】:View Controller orientation is not working as expect, What am I missing?视图控制器方向没有按预期工作,我错过了什么? 【发布时间】:2021-12-08 03:18:53 【问题描述】:

我的应用是横向模式,除了一个 VC。 TopVC 是横向的,但在加载 MyVC 时,它应该根据设备方向旋转。如果模式纵向(横向模式很好),加载 MyVC 按预期工作但返回 TopVC 显示不正确。 这是我尝试过的代码 在 AppDelegate.swift

var orientationLock = UIInterfaceOrientationMask.landscape
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask         
    return self.orientationLock


func lockOrientation(_ orientation: UIInterfaceOrientationMask) 
    self.orientationLock = orientation

MyVC.swift

override func viewWillAppear(_ animated: Bool) 
    // change orientation
    if let delegate = UIApplication.shared.delegate as? AppDelegate 
        delegate.lockOrientation(.allButUpsideDown)
    

override func viewWillDisappear(_ animated: Bool)         
    if let delegate = UIApplication.shared.delegate as? AppDelegate 
        delegate.lockOrientation(.landscapeLeft)
    

有人可以帮我解决这个问题吗? 如果从 MyVC 返回纵向模式,问题是返回 TopVC 以纵向模式显示。

【问题讨论】:

看看这个***.com/questions/27037839/… @ShreeramBhat 感谢您的支持,我已经尝试过一个及以下的答案。 ***.com/a/58424565/1835679 【参考方案1】:

如果有人需要答案,试试这个。为我工作。

override func viewWillDisappear(_ animated: Bool)         
    if let delegate = UIApplication.shared.delegate as? AppDelegate 
        delegate.lockOrientation(.landscape)
    
    if !UIWindow.isLandscape 
        UIDevice.current.setValue(Int(UIInterfaceOrientation.landscapeLeft.rawValue), forKey: "orientation")
    

【讨论】:

以上是关于视图控制器方向没有按预期工作,我错过了啥?的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationController - 应用程序试图在目标上推送一个 nil 视图控制器,我错过了啥?

滑动动作没有弹出到上一个控制器 - 我错过了啥?

NSURLSessionDownloadTask 并发下载,app 后台也支持,没有按预期工作

旋转时切换视图无法正常工作

自动布局约束未按预期工作

导航控制器 popViewControllerAnimated :是的没有按预期工作