TNV架构下,部分旋转这个功能,实现起来比较蛋疼,给一个目前的方法。
1、自定义TabBar:
extension C4MVTTabBarController: UITabBarControllerDelegate { func tabBarControllerSupportedInterfaceOrientations(_ tabBarController: UITabBarController) -> UIInterfaceOrientationMask { return selectedViewController?.supportedInterfaceOrientations ?? .all } func tabBarControllerPreferredInterfaceOrientationForPresentation(_ tabBarController: UITabBarController) -> UIInterfaceOrientation { return selectedViewController?.preferredInterfaceOrientationForPresentation ?? .portrait } }
并且记得设置delegate
2、自定义NavigationController
class C4MVTNavigationController: UINavigationController { override var supportedInterfaceOrientations: UIInterfaceOrientationMask { return self.visibleViewController?.supportedInterfaceOrientations ?? .portrait } override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation { return self.visibleViewController?.preferredInterfaceOrientationForPresentation ?? .portrait } }
3、自定义ViewController
class C4MVTBaseController: UIViewController { var needRotate: Bool { return false } override var shouldAutorotate: Bool { return needRotate ? true : false } override var supportedInterfaceOrientations: UIInterfaceOrientationMask { return needRotate ? .all : .portrait } override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation { return .portrait } ////在返回的时候 (具体怎么判断和你的页面push还是模态present有关) if (needRotate) { UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation") } }
最后退出时强制设置为竖屏 一定不要忘记,否则会有个小bug