0

我已经实现了从 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 AviewWillAppear/viewWillDisappear永远不会被调用(因为 VC A 的观点从未被完全驳回)。
  • containerViewWillLayoutSubviews/containerViewDidLayoutSubviewsUIPresentationController在这种情况下也没有调用的自定义

任何想法都非常感谢。

iOS 10,Xcode 8.3

4

1 回答 1

0

使用 Xcode 9 编译并在 iOS 11 上运行似乎已经解决了这个问题。参考我上面的描述,在 Xcode 9/iOS 11 中:

当 VC B 被关闭时,VC A 的按钮会自动重新定位在 VC A 的顶部。重新定位不是动画的,看起来很奇怪,但它按预期工作,并尊重顶部布局指南的自动布局约束。

于 2017-09-25T11:31:06.947 回答