5

我使用UIPresentationController呈现模态视图控制器。我使用下面的方法设置呈现视图的框架小于包含视图的边界:当另一个视图控制器显示在其上时,UIPresentationController更改大小

override func frameOfPresentedViewInContainerView() -> CGRect { 
    let myDX = (self.containerView!.bounds.width - 600)/2 
    let myDY = (self.containerView!.bounds.height - 600)/2 
    return self.containerView!.bounds.insetBy(dx: myDX, dy: myDY) 
} 

一切工作都很好,至此。

现在,我在当前显示的占用整个屏幕的模式视图控制器之上以模态方式呈现另一个视图控制器(默认不是自定义)。所以,我在默认的模态视图控制器下面有一个自定义的模态视图控制器,它覆盖整个屏幕。

问题是,当我关闭覆盖整个屏幕的顶视图控制器时,我的自定义视图控制器也出现覆盖整个屏幕。我希望我的自定义视图控制器的大小保持不变(比containerView小)。有什么办法可以做到这一点吗?

任何帮助,将不胜感激

+0

也许你可以使用autoLayout而不是硬编码的框架尺寸? – Koen

回答

10

我遇到了同样的问题。我无法通过添加约束来解决它,并且-[UIPresentationController containerViewWillLayoutSubviews]被调用得太晚(在解散动画完成后)。

经过一段时间后,我发现问题似乎是,当您使用默认的全屏演示文稿样式呈现时,呈现控制器视图将从视图层次结构中删除,并且必须以全屏幕大小再次添加再次显示。

在iOS 8中,您可以使用UIModalPresentationOverFullScreen作为presentationStyle,当从较小的控制器呈现时。系统将不会自动删除呈现控制器的视图。 (-[UIViewController viewWillDisappear:]等等,当你这样做时,不会在提示控制器上调用)

你也可以使用在iOS 7中可用的UIModalPresentationCustom,但是你必须提供你自己的过渡动画。

相关问题