iOS 14 已更改(或损坏?)SwiftUI GeometryReader

lp1*_*756 12 ios swift swiftui ios14

从今天发布的 iOS 14.0 开始,我的 iOS 代码(严重依赖 GeometryReader 进行布局)不再运行良好。即,布局已经有点随机。

在 Xcode 调试器中,我比较了在 iOS 13.6 和 iOS 14.0 上运行的相同代码,发现问题在于 iOS 14.0 中未初始化 GeometryProxy 结构。

在变量 g 下方的示例代码中,GeometryProxy 在 iOS 13 中具有有效的宽度和高度值,但在 iOS 14 中全部为零。(这只是我对 GeometryProxy 值所做的更简单的使用之一——如果没有人,我将不胜感激指出一个明显的事实,这个片段可以通过另一种方式更容易地完成。)

这是对 GeometryReader 的更改还是错误?有人有解决方法吗?我是否在依赖 GeometryReader 进行动态布局时犯了一个巨大的错误?

struct TextView: View {
  @EnvironmentObject var data: RecorderData
  let m = MusicalNote()

  var body: some View {
      GeometryReader { g in
          Stack(alignment: .leading) {
              Text(self.data.curNote.getString())
                 .font(.system(size: g.size.height / 2.4))
                 .padding(.bottom)
              Text(self.data.fdata.fingerings[self.data.curRecorder.id] ![self.data.curNote.seq] ![self.data.curFingType] ![self.data.currentFingeringChoice].comment)
                 .font(.headline)
        }
      Spacer()
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

小智 8

它肯定改变了 - 这篇文章总结了它:https : //swiftui-lab.com/geometryreader-bug/

GeometryReader 现在的内容布局与过去不同。它曾经在父级中水平和垂直居中,但现在将其与左上角对齐。

我的应用程序看起来很糟糕 - 令人沮丧的是不清楚这是否是新行为和设计的那样,或者它是否是一个错误并将被修复。我正在尝试通过我的应用程序并手动应用偏移量,但使用 GeometryReader 的布局的动态特性意味着它并不总是那么容易。