SWRevealViewController

SWRevealViewController

我正在使用 SWRevealViewController ( https://github.com/John-Lluch/SWRevealViewController ) 来处理两个 Controller 之间的切换,一个“前”和一个“后”。

前端 Controller 是一个 UINavigationController,后端 Controller 只是一个简单的 UIViewController,用于显示菜单项列表。前面的 UINavigationController 推送名为 FrontViewController 的 View Controller 的实例。后面的 UIViewControllerRearViewController 的一个实例。一旦配置了前后 Controller ,SWRevealViewController 的实例就被设置为根 View Controller ,显示 Controller 的 delegate 属性被设置为应用程序委托(delegate)本身。

FrontViewControllerRearViewController 中,我都覆盖 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/

10-12 04:40