当另一个视图控制器显示在其上时,UIPresentationController会更改大小

时间:2015-09-25 23:56:02

标签: ios8 uikit uipresentationcontroller uitraitcollection uikit-transitions

我使用UIPresentationController呈现模态视图控制器。我使用以下方法设置presentView的框架小于containsView的边界:

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)。有什么方法可以实现这一点。

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:13)

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

一段时间后,我发现问题似乎是当您使用默认UIModalPresentationFullScreen presentationStyle呈现并再次添加全屏时,正在从视图层次结构中删除呈现控制器视图必须再次显示的尺寸。

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

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