我在我的应用程序中使用自定义启动动画。我已经更新了我的应用以使用Safe Area
而不是传统的布局指南。
在过渡动画开始时,我在目标视图控制器中获取UIView的帧,与顶部安全区域布局指南对齐,如下所示:
我为从屏幕中心到该位置的相同视图的快照设置动画。
在iPhone X(不是任何其他设备)上出现问题,UIView实际上在其最终位置上方动画,使动画看起来很滞后。
问题是我在动画期间(在屏幕上显示之前)从视图中获取的帧不是视图的正确最终帧。
似乎安全区域顶部布局指南实际上尚未设置在该点,将我的视图约束到屏幕的顶部,这是我在动画期间读取的帧。
有人知道这是否是一个错误,或者如果没有,在安全区域顶部布局指南在屏幕上显示之前,如何计算我的uiview的实际正确框架?
Here is an example project showing the issue I'm having。请在iPhone X模拟器上运行。
Here is a video showing the issue I'm experiencing on the iPhone X Simulator
答案 0 :(得分:3)
我有同样的问题并通过为视图的顶部约束添加@IBOutlet来解决它我动画并使用safeAreaInsets来计算正确的高度:
@IBOutlet var wifiImageViewTopConstraint: NSLayoutConstraint!
...
view.safeAreaInsets.top + wifiImageViewTopConstraint.constant
所以在我的情况下,安全区域的顶部常数是50 - 对于iPhone X,它将是44 + 50 = 94 - 对于其他手机,它将是20 + 50 = 70