iOS 处理旋转某些ViewController屏幕的问题



常见的应用都是以竖屏启动的,在启动后只有某些ViewController才需要进行横屏显示。
按照本教程配置,可确保应用以竖屏启动,在需要旋转屏幕的ViewController中可进行屏幕旋转。



1.在项目设置中,设置屏幕方向:

设置屏幕方向

这里有一个注意事项,如果你要确保应用是以竖屏启动的,就一定不要勾选其他方向!


2.在AppDelegate中添加以下代码:

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

这里,除了倒转方向,其他都支持,按照个人需求进行配置即可。


3.如果根ViewController是TabBarContoller,添加以下代码:

    override var shouldAutorotate: Bool{
        return self.selectedViewController?.shouldAutorotate ?? false
    }
    override var supportedInterfaceOrientations: UIInterfaceOrientationMask{
        return self.selectedViewController?.supportedInterfaceOrientations ?? .portrait
    }
    override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation{
        return self.selectedViewController?.preferredInterfaceOrientationForPresentation ?? .portrait
    }


4.如果使用了UINavigationController,使用自定义的类继承UINavigationController,在这个自定义的类中添加以下代码:

    override var shouldAutorotate: Bool{
        return self.topViewController?.shouldAutorotate ?? false
    }
    override var supportedInterfaceOrientations: UIInterfaceOrientationMask{
        return self.topViewController?.supportedInterfaceOrientations ?? .portrait
    }
    override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation{
        return self.topViewController?.preferredInterfaceOrientationForPresentation ?? .portrait
    }


5.在需要旋转屏幕的ViewController中添加以下代码:

    override var shouldAutorotate: Bool{
        return true
    }
    override var supportedInterfaceOrientations: UIInterfaceOrientationMask{
        return .landscapeRight  // 支持的屏幕方向,根据个人需求进行配置
    }


6.然后,在需要旋转屏幕的ViewController中添加以下代码,根据个人需要调用此方法即可实现屏幕旋转,并及时更新所有控件的布局:

    public static func setScreenOrientation(_ orientation:UIInterfaceOrientation){
        
        var value = UIInterfaceOrientation.unknown.rawValue
        UIDevice.current.setValue(value, forKey: "orientation")
        
        value = orientation.rawValue
        UIDevice.current.setValue(value, forKey: "orientation")
    }


7.最后,在离开已旋转的ViewController时,将屏幕旋转方向恢复原始值(否则会遭遇bug),调用上面定义的setScreenOrientation()方法即可。




参考资料:
ios启动页强制竖屏(进入App后允许横屏与竖屏)
完美解决 iOS 中只旋转自己想要旋转的屏幕
iOS指定页面屏幕旋转,手动旋转

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容