微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何处理暂时不正确的 SafeAreaInsets?

如何解决如何处理暂时不正确的 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

所以问题是:

  1. 我们怎么知道在 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 中只有一个插入边发生了变化,而更多的边即将发生变化?
  2. 我们怎么知道 SafeAreaInsetsDidChange 中的 SafeAreaInsets 是针对新方向的,而 ViewSize 仍然是针对旧方向的?

我想不可能从 UIKit 获得这个信息,但还是试试 :)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。