如何解决如何处理暂时不正确的 SafeAreaInsets?
我正在我的 iOS 应用中制作漂亮的屏幕旋转动画。 当屏幕尺寸发生变化时,我会相应地更新其中的(金属)模型。
问题是由于来自 VC 生命周期事件的错误信息,我有视觉内容“跳跃”。
我没有使用自动布局,但自动布局和手动布局的视觉效果是一样的 - 只有代码不同。
一个例子:在我的 iPhone XR 上
Future<usermodel> getUserById(String id) async =>
await _firestore.collection(collection).doc(id).get().then((doc) {
if (doc.exists) { // ? check if the document exists
return usermodel.fromDocument(doc);
}
else {
return null; // ? return something that your calling code can handle
}
});
这些值很奇怪,因为它是照片扩展名 :)
现在,当屏幕从纵向旋转到横向时,不是在一次事务中完成,而是在多个步骤中完成:
portrait mode: ViewSize = 414x986,SafeAreaInsets = 92,34,0
landscape mode: ViewSize = 800x414,SafeAreaInsets = 44,21,0
所以问题是:
- 我们怎么知道在
Events log: 1. ViewDidLayoutSubviews: {{0,0},{414,896}} + {92,0} -> {{0,0} 2. SafeAreaInsetsDidChange: {{0,48,0} 3. ViewDidLayoutSubviews: {{0,0} 4. SafeAreaInsetsDidChange: {{0,896}} + {44,0} 5. ViewDidLayoutSubviews: {{0,0} 6. ViewWillTransitionToSize 7. ViewDidLayoutSubviews: {{0,{800,414}} + {44,0} Meaning: 1 = view frame + insets for Portrait orientation (before rotation) 2 = incorrect info: `{92,0}` is invalid insets,valid ones are {92,0} in Portrait and {44,0} in Landscape 3 = incorrect info,see 2 4 = correct insets arrived for Lanscape,but ViewSize is still Portrait 5 = incorrect pair ViewSize + SafeAreaInsets,see 4 6 = ViewWillTransitionToSize event arrived,why so late? 7 = finall correct pair ViewSize + SafeAreaInsets
中只有一个插入边发生了变化,而更多的边即将发生变化? - 我们怎么知道
SafeAreaInsetsDidChange
中的 SafeAreaInsets 是针对新方向的,而 ViewSize 仍然是针对旧方向的?
我想不可能从 UIKit 获得这个信息,但还是试试 :)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。