我已经实现了从 ViewController A(嵌入在 UINavigationController 中)到 ViewController B 的自定义转换。
过渡从底部“滑动”VC B,直到它占用垂直屏幕大小的 1/2 - 使用自定义UIViewControllerAnimatedTransitioning
对象。自定义演示文稿还会移动演示文稿 VC A,因此它使用animateAlongsideTransition(in:animation:compeltion)
call in presentationWillBegin()
override 的 custom与传入的 VC B 一起向上滑动UIPresentationContorller
。考虑分屏,显示 VC 的下 1/2 在顶部,显示的 VC 在底部。
除了我似乎无法解决的一个烦人的情况外,一切都按预期工作:
- VC A 有一些子视图(按钮),这些子视图(按钮)被限制(界面构建器中的自动布局)到 VC A 的顶部布局指南(同样,VC A 在 NavC 中)。
- 当我呈现模态视图 (B) 时,这些子视图作为过渡的一部分被向上推(很棒),当 VC B 被关闭时(很棒)又被向下推。
- 但是,当 VC B 出现时,应用程序被置于后台,然后回到前台,VC A 的子视图显示在屏幕顶部 - 即在 VC A 的视图中间而不是顶部(坏)。当 VC B 被解散时,他们停留在中间(坏的)——只有通过离开 VC A 并返回来启动完整的 VC“重绘”才能解决问题。
我知道问题出在回到前台时重新校准顶部布局指南,但在显示视图之前无法弄清楚如何修复它。
一种方法是将子视图的约束设置为“超级视图顶部”而不是“顶部布局指南”,但这会超越自动布局作为 NavC 的一部分。
- 在这种情况下,VC A
viewWillAppear/viewWillDisappear
永远不会被调用(因为 VC A 的观点从未被完全驳回)。 containerViewWillLayoutSubviews/containerViewDidLayoutSubviews
UIPresentationController
在这种情况下也没有调用的自定义
任何想法都非常感谢。
iOS 10,Xcode 8.3