UIPresentation控制器 - 从后台

时间:2017-09-12 19:40:49

标签: ios swift autolayout uipresentationcontroller

我实现了从ViewController A(嵌入在UINavigationController中)到ViewController B的自定义转换。

过渡"幻灯片" VC B从底部直到占用垂直屏幕大小的1/2 - 使用自定义UIViewControllerAnimatedTransitioning对象。自定义演示文稿还会移动呈现的VC A,以便使用animateAlongsideTransition(in:animation:compeltion)presentationWillBegin()覆盖自定义UIPresentationContorller时调用传入的VC B。认为分屏是顶部呈现VC的下半部分和底部呈现的VC。

除了一个我似乎无法解决的唠叨案例外,一切都按预期工作:

  • VC A有一些子视图(按钮)被约束(在界面构建器中自动布局)到VC A的顶部布局指南(同样,VC A在NavC中)。
  • 当我呈现模态视图(B)时,这些子视图作为转换的一部分被推高(很好),当VC B被解除时(伟大)再次向下推。
  • 但是当呈现VC B并且应用程序被放入后台然后回到前台时,VC A的子视图显示在屏幕顶部 - 即在VC A的中间查看而不是顶部(坏)。当VC B被解雇时,它们会停留在中间(坏) - 只启动一个完整的VC"重绘"通过导航VC A并返回修复问题。

我理解这个问题在某种程度上取决于顶部布局指南在返回前台时重新校准,但在显示视图之前无法弄清楚如何修复它。

一种方法是将子视图的约束设置为" superview top"而不是"顶部布局指南"但是,那就是自动布局作为NavC的一部分。

  • 在这种情况下,VC A' viewWillAppear/viewWillDisappear永远不会被调用(因为VC A&#39}的视图从未被完全解雇过。)
  • 自定义containerViewWillLayoutSubviews/containerViewDidLayoutSubviews
  • UIPresentationController在此情况下未被调用

任何想法都非常感激。

iOS 10,Xcode 8.3

1 个答案:

答案 0 :(得分:0)

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

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