在容器视图中,definePresentationContext = true仍允许在背景视图上进行模态动画

时间:2018-07-30 20:05:28

标签: swift uikit ios-animations

在我的代码中,我正在使用present(:animated:completion :)方法从ViewController1中呈现ViewController2,它是嵌套在RootViewController中的容器视图的根视图控制器。

我已经将表示样式设置为.coverVertical,并且将ViewController1的definePresentationContext变量的viewDidLoad()方法设置为true。我还将ViewController2的演示文稿设置为.overCurrentContext。这使ViewController2的边界与ViewController1的边界相同,但是无论出于何种原因,.coverVertical动画都从屏幕底部开始,而不是从ViewController1框架的底部开始。

但是,当我将容器视图的根视图控制器设置为UINavigationController并将ViewController1嵌套在其中时,这种情况就消失了。我认为这意味着我缺少第二个上下文变量,该变量阻止动画在其他视图上进行动画设置,但是除了definePresentationContext之外,我似乎找不到任何其他变量。

1 个答案:

答案 0 :(得分:1)

所以您说的是您的视图控制器层次结构

RootViewController
    ViewController1

在这种情况下,请在ViewController1中运行以下代码:

let vc = // ViewController2 instance, obtained somehow
vc.modalTransitionStyle = .coverVertical
self.definesPresentationContext = true
vc.modalPresentationStyle = .currentContext
self.present(vc, animated: true)

您会看到过渡只涉及ViewController1的视图区域。

请注意,容器视图的clipsToBounds必须设置为true。如果没有容器视图,请添加一个(提供剪辑)-尽管我相信从您的描述中可以看到一个视图(即您在情节提要中配置了该视图)。