iOS 6中:家长模式的modalPresentationStyle旋转后忽略(iOS 6: Par

2019-08-02 15:49发布

与iPad与iOS6的,我们有这个bug,其中一个模式视图控制器将扩大到全屏,即使它被告知要使用“格式表”的演讲风格。 但是,这种情况只是如果有两个情态动词,一个父一个和它的孩子。

因此,这是怎样的第一模式创建并提交:

UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:controller] autorelease];
navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
[parentController presentModalViewController:navigationController animated:YES];
// parentController is my application's root controller

这是怎样的孩子模式创建并提交:

UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:controller] autorelease];
navigationController.modalPresentationStyle = UIModalPresentationFormSheet;
[parentController presentModalViewController:navigationController animated:YES];
// parentController is the navigationController from above

所以,从横向旋转为纵向时,父模式将扩大到全屏,并保持即使我们转回景观的方式。

当我们有父本身(无子模态)模态所有,那么它将按预期工作,这是它仍然在形式上纸方式。

请注意,这发生在iOS6的唯一(设备和仿真器)和iOS 5不会发生(模拟器和报告测试工作)。

到目前为止,我已经尝试没有成功如下:

  • 设置wantsFullScreenLayoutNO
  • 迫使wantsFullScreenLayout总是返回NO通过重写它
  • 使导航控制器内部的某些我的控制器还指定UIModalPresentationFormSheet
  • 实施preferredInterfaceOrientationForPresentation
  • 升级到iOS 6.0.1

谢谢!


更新 :所以,我改编自苹果开发者论坛(响应https://devforums.apple.com/message/748486#748486 ),使其与多个嵌套模式的工作原理。

- (BOOL) needNestedModalHack {
    return [UIDevice currentDevice].systemVersion.floatValue >= 6;
}

- (void) willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
                                          duration:(NSTimeInterval)duration {

    // We are the top modal, make to sure that parent modals use our size
    if (self.needNestedModalHack && self.presentedViewController == nil && self.presentingViewController) {
        for (UIViewController* parent = self.presentingViewController;
             parent.presentingViewController;
             parent = parent.presentingViewController) {
            parent.view.superview.frame = parent.presentedViewController.view.superview.frame;
        }
    }

    [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
}

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
                                 duration:(NSTimeInterval)duration {
    // We are the top modal, make to sure that parent modals are hidden during transition
    if (self.needNestedModalHack && self.presentedViewController == nil && self.presentingViewController) {
        for (UIViewController* parent = self.presentingViewController;
             parent.presentingViewController;
             parent = parent.presentingViewController) {
            parent.view.superview.hidden = YES;
        }
    }

    [super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
}

- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
    // We are the top modal, make to sure that parent modals are shown after animation
    if (self.needNestedModalHack && self.presentedViewController == nil && self.presentingViewController) {
        for (UIViewController* parent = self.presentingViewController;
             parent.presentingViewController;
             parent = parent.presentingViewController) {
            parent.view.superview.hidden = NO;
        }
    }

    [super didRotateFromInterfaceOrientation:fromInterfaceOrientation];
}

Answer 1:

不知道这应该被看作是一个错误,我很好奇的iOS 7将带来,但对于这个问题,目前的解决办法是modalPresentationStyle设置UIModalPresentationCurrentContext为孩子视图控制器。

Set modalPresentationStyle = UIModalPresentationCurrentContext

这使得仍然beeing表现为港前赛绩的孩子,但防止父从beeing调整为全屏上旋转。

短剑



Answer 2:

我可以在这里看到2个问题。

1)在iOS 6中的方法presentModalViewController:animated:已被弃用,请尝试使用presentViewController:animated:completion: (尽管这可能没有帮助,你可能仍然想这样做)

2)在iOS 6中以某种方式似乎容器控制器(如UINavigationController )不重新发送自动旋转消息发送到他们的孩子。 试着子类UINavigationController并重新定义相应的自动旋转的方法来发送给所有的孩子。 这可能帮助。



Answer 3:

你需要你的主视图后,实例化的导航控制器。 这样你就可以在每个视图来管理旋转。

如果你的AppDelegate RootViewController的是导航控制器,你将无法使用本机的功能来管理旋转。



文章来源: iOS 6: Parent modal's modalPresentationStyle ignored after rotation