我想知道这段 SwiftUI 代码到底是怎么回事。我想在横向模式下将蓝色视图与安全区域的前缘对齐。下面的代码可以工作,但如果我在blueOffset
下面的计算中删除 -0.5 点调整,它根本不起作用。它Blue View
只是在前缘填充了整个安全区域。我想知道-0.5
有什么魔法?
@ViewBuilder
var secondBody:some View {
Color.green.opacity(0.3)
.ignoresSafeArea()
.onGeometryChange(for: CGRect.self) { proxy in
proxy.frame(in: .global)
} action: { newValue in
viewSize = newValue.size
}
.background {
Color.blue
.ignoresSafeArea()
.aspectRatio(verticalSizeClass == .regular ? 9.0/16.0 : 16.0/9.0, contentMode: .fit)
.onGeometryChange(for: CGRect.self) { proxy in
proxy.frame(in: .global)
} action: { newValue in
blueViewSize = newValue.size
//This line, why it works????
blueOffset =
verticalSizeClass == .regular ? 0 :
(viewSize.width - blueViewSize.width)/2 - 0.5
print("Blue offset \(blueOffset)")
}
.offset(x: -blueOffset)
}
.persistentSystemOverlays(.hidden)
}
对于喜欢扩展的视图,例如
Color
,只要它们与不安全区域相交/接触,它们就会填充整个不安全区域。-0.5
基本上是防止蓝色视图接触安全区域。您需要减去的实际最小值是pixelLength
- 以点为单位的一个像素的长度。也就是说,如果您只是希望蓝色视图尊重安全区域的前缘,那么您应该这样做:
edges:
的默认值为.all
,因此前缘也被忽略。由于您不想忽略它,因此您应该传递除 之外的所有其他边.leading
。