6

我正在使用 UIPresentationController 展示一个模态视图控制器。我使用以下方法将presentView的框架设置为小于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)。有什么办法可以做到这一点。

任何帮助,将不胜感激

4

1 回答 1

17

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

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

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

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

于 2015-10-28T07:43:30.020 回答