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



截至今天发布的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()
}
}
}

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

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

我的应用程序看起来很糟糕——令人沮丧的是,不清楚这是否是新行为,是否符合设计,或者这是否是一个错误,是否会被修复。我正在尝试浏览我的应用程序并手动应用偏移,但使用GeometryReader布局的动态特性意味着这并不总是容易的。

编辑我以前的答案,认为这显然是一个糟糕的建议

发件人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等其他布局容器的约定相匹配。这种行为是新常态。

最新更新