3

我在我的应用程序中使用自定义启动动画。我已经更新了我的应用程序以使用Safe Area而不是传统的布局指南。

在过渡动画开始时,我将目标视图控制器中的 UIView 框架与顶部安全区域布局指南对齐,如下所示:

顶部对齐约束

我为从屏幕中心到该位置的相同视图的快照制作动画。

iPhone X(不是任何其他设备)上出现了一个问题,其中 UIView 实际上动画到其最终位置之上,从而使动画显得滞后。

问题是我在动画期间(在屏幕上呈现之前)从视图中获得的帧不是视图的正确最终帧。

似乎安全区域顶部布局指南实际上尚未设置,将我的视图限制在屏幕顶部,这是我在动画期间阅读的帧。

有谁知道这是否是一个错误,或者如果不是,我如何在安全区域顶部布局指南在屏幕上显示之前计算出我的 uiview 的实际正确框架?

这是一个示例项目,显示了我遇到的问题。请在 iPhone X 模拟器上运行。

这是一段视频,显示了我在 iPhone X Simulator 上遇到的问题

4

1 回答 1

3

我遇到了同样的问题,并通过为我正在制作动画的视图的顶部约束添加 @IBOutlet 并使用 safeAreaInsets 计算正确的高度来解决它:

@IBOutlet var wifiImageViewTopConstraint: NSLayoutConstraint!

...

view.safeAreaInsets.top + wifiImageViewTopConstraint.constant

所以在我的情况下,安全区域的最高常数是 50 - 对于 iPhone X,它将是 44 + 50 = 94 - 对于其他手机,它将是 20 + 50 = 70

于 2018-03-22T10:56:46.203 回答