一尘不染

关闭模态视图控制器时如何保持呈现视图控制器的方向?

swift

我正在使用此应用程序,我需要所有视图控制器,但一个需要纵向显示。我特别需要一个单一的视图控制器,使其能够旋转至手机所处的方向。

为此,我以模态形式呈现(未嵌入NavigationController中)

所以(例如)我的结构是这样的:

  • 窗口-肖像
    • 根视图控制器(UINavigationController-肖像)
    • 家庭视图控制器(UIViewController-肖像)
      • 详细信息视图控制器(UIViewController-肖像)
      • 模态视图控制器(UIVIewController-全部)

现在,无论何时我在横向位置关闭模态视图控制器,即使它不支持该方向,我的父视图控制器也会旋转。

应用程式中的全部UIViewControllersUINavigaionControllers都继承自已实现这些方法的相同通用类:

override func supportedInterfaceOrientations() -> Int
{
    return Int(UIInterfaceOrientationMask.Portrait.toRaw())
}

我的模态视图控制器再次重写此方法,它看起来像这样:

override func supportedInterfaceOrientations() -> Int
{
    return Int(UIInterfaceOrientationMask.All.toRaw())
}

更新1

看来这仅在iOS8 Beta上发生。有人知道视图控制器的旋转是否发生了变化,或者仅仅是Beta中的错误?


阅读 163

收藏
2020-07-07

共1个答案

一尘不染

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
if ([self.window.rootViewController.presentedViewController isKindOfClass: [SecondViewController class]])
{
    SecondViewController *secondController = (SecondViewController *) self.window.rootViewController.presentedViewController;

    if (secondController.isPresented)
        return UIInterfaceOrientationMaskAll;
    else return UIInterfaceOrientationMaskPortrait;
}
else return UIInterfaceOrientationMaskPortrait;
}

对于斯威夫特

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow) -> Int {

    if self.window?.rootViewController?.presentedViewController? is SecondViewController {

        let secondController = self.window!.rootViewController.presentedViewController as SecondViewController

        if secondController.isPresented {
            return Int(UIInterfaceOrientationMask.All.toRaw());
        } else {
            return Int(UIInterfaceOrientationMask.Portrait.toRaw());
        }
    } else {
        return Int(UIInterfaceOrientationMask.Portrait.toRaw());
    }

}

有关更多详细信息,请检查此链接

2020-07-07