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

时间:2020-09-17 16:21:05

标签: ios swift swiftui ios14

从今天的iOS 14.0版本开始,我的iOS代码(在很大程度上依赖于GeometryReader进行布局)不再能正常工作。也就是说,布局已经是随机的。

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

在变量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()
    }
  }
}

2 个答案:

答案 0 :(得分:4)

肯定已更改-这篇文章总结了一下:https://swiftui-lab.com/geometryreader-bug/

GeometryReader现在可以将其内容布置得与以前不同。以前,它在父级中水平和垂直居中,但现在将其对齐到左上角。

我的应用程序看上去很糟糕-令人沮丧的是,目前尚不清楚这是否是新行为且设计是否正确,或者是否是错误并将得到修复。我正在尝试浏览我的应用程序并手动应用偏移,但是使用GeometryReader的布局具有动态性质,这并不总是那么容易。

答案 1 :(得分:1)

将我以前的答案编辑为现在明显的错误建议

来自https://developer.apple.com/documentation/xcode-release-notes/xcode-12-release-notes

针对iOS 14,macOS 11,watchOS 7和tvOS 14 SDK进行重建,更改了GeometryReader的用法,从而可靠地领先于将GeometryReader内部的视图对齐。这是以前的行为,除了无法在GeometryReader中检测到单个静态视图时。 (59722992)(FB7597816)

至少对我来说,上一个行为按照其标准是错误的-尽管它与VStack等其他布局容器的约定相匹配。而且这种行为是新常态。