当另一个视图控制器显示在它上面时,UIPresentationController 改变大小

UIPresentationController changes size when another view controller is displayed on top of it

我正在使用 UIPresentationController 展示模态视图控制器。我使用以下方法将 presentedView 的框架设置为小于 containView 的边界:

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

如有任何帮助,我们将不胜感激

我遇到了同样的问题。加约束解决不了,调用-[UIPresentationController containerViewWillLayoutSubviews]来晚了(在dismiss动画完成后)

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

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

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