KMSOrientationPatch
动机
在 iOS APPs 中,视图控制器可以提供它支持哪些界面方向,并且不同视图控制器之间可能支持不同的界面方向。
当一个视图控制器呈现或消失时,整个 UI 可能会旋转,使活动的视图控制器位于其支持的界面方向之一。
但是如果我们在一个导航控制器内推送或弹出视图控制器,事情就会有所不同。首先,活动的视图控制器是导航控制器而不是其内的某个视图控制器,因此 UI 的方向由导航控制器支持的界面方向决定。尽管如此,即使我们有绑定导航控制器支持的界面方向与其最顶层视图控制器的方式的代码,UI 在推送或弹出时也不会旋转。简单来说,您几乎一定不会成功推送一个不支持当前界面方向的视图控制器,并期望 UI 自动旋转。
通常,人们会告诉您添加类似以下代码
UIDevice.current.setValue(UIInterfaceOrientation.landscapeLeft.rawValue, forKey: "orientation")
来处理这种情况。这个黑客可能能完成一些事情,但会让代码 khó đọc ở khắp mọi nơi. 更重要的是,使用它往往会引起UI方向的奇怪旋转。
因此出现了这个框架 KMSOrientationPatch
。
使用说明
将其导入到您的项目中后,您可以在主线程上的任何时间直接调用
UIDevice.attemptRotationToSupportedOrientations()
(Swift)
[UIDevice attemptRotationToSupportedOrientations];
(Objective-C),以使UI旋转到最近的支持方向。
您可以将以下代码添加到您的基视图控制器中,不再需要考虑旋转。
override
func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
UIDevice.attemptRotationToSupportedOrientations()
}
导入
-
在此阶段,将文件
UIDevice+Extensions.swift
复制到您的项目中即可使其正常工作。 -
或者,可以将项目
KMSOrientationPatch
作为Framework项目添加到您的工作区。 -
最后,您可以通过在pod文件中添加以下行来使用它作为一个pod。
pod 'KMSOrientationPatch'