我正在使用 SWRevealViewController
( https://github.com/John-Lluch/SWRevealViewController ) 来处理两个 Controller 之间的切换,一个“前”和一个“后”。
前端 Controller 是一个 UINavigationController
,后端 Controller 只是一个简单的 UIViewController
,用于显示菜单项列表。前面的 UINavigationController
推送名为 FrontViewController
的 View Controller 的实例。后面的 UIViewController
是 RearViewController
的一个实例。一旦配置了前后 Controller ,SWRevealViewController
的实例就被设置为根 View Controller ,显示 Controller 的 delegate
属性被设置为应用程序委托(delegate)本身。
在 FrontViewController
和 RearViewController
中,我都覆盖 shouldAutorotate
并返回 NO 以及覆盖 supportedInterfaceOrientations
并返回 UIInterfaceOrientationMaskPortrait
。
然而,当我旋转设备时,应用程序会自动旋转并进入横向,而这两个 View 正在显示。supportedInterfaceOrientations
似乎只在 FrontViewController
中被调用,但该值不被尊重并且设备旋转到横向。
我也不能简单地将整个应用程序设置为纵向,因为我还有其他想要支持横向的细节 View (电影播放器等)。
如何让 SWRevealViewController
工作,以便在 Controller 的某些 subview 中将应用程序限制为纵向?
我还注意到演示文稿的更改也没有得到尊重。在 RearViewController
中,我覆盖 prefersStatusBarHidden
以返回 YES
但从未调用此方法。同样,在 FrontViewController
中,我覆盖了 preferredStatusBarStyle
以返回 UIStatusBarStyleLightContent
但也从未调用过此方法。
我在 plist 中将 UIViewControllerBasedStatusBarAppearance
设置为 YES
。
更新:
我尝试按照评论中的建议使用 PKRevealController
,但行为完全相同。完全忽略支持的方向和状态栏样式。 supportedInterfaceOrientations
上的 FrontViewController
是唯一调用的覆盖,但不遵守 UIInterfaceOrientationMaskPortrait
的返回值。
更新 2:
我认为这只是这些控件的一个限制,他们几乎希望整个应用程序的支持方向都相同。然而,我确实尝试了 MFSideMenu
( https://github.com/mikefrederick/MFSideMenu ),它似乎完全按照您的预期处理不同 subview 中支持的方向。不幸的是,我仍然没有状态栏可见性和样式工作。
最佳答案
为了在不避免 SWRevealViewController 的情况下实现这一点:在它内部有实现的方法 supportedInterfaceOrientations,需要对其进行编辑。我已经这样做了:
- (NSUInteger)supportedInterfaceOrientations
{
UINavigationController* frontNavigationController = (UINavigationController*)self.frontViewController;
if ([frontNavigationController.visibleViewController isKindOfClass:[VCgallery class]]) {
return UIInterfaceOrientationMaskAll;
}
return UIInterfaceOrientationPortrait | UIInterfaceOrientationPortraitUpsideDown;
}
我所有的 viewController 都是纵向的,除了那些属于 VCgallery 类的,它可以是纵向和横向。
关于ios - 如何配置 SWRevealViewController/PKRevealController/etc 来处理方向和呈现的变化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20528968/