【发布时间】:2026-01-16 21:40:01
【问题描述】:
我在 macOS 11.2.2 上使用 Xcode 12.4 和 Swift 5.4
我想控制两个Text 视图之间的空间。自然会想到padding。这是代码
VStack(alignment: .leading) {
Text("Exploring San Francisco")
.font(.appTitle1)
.fontWeight(.bold)
.padding(.bottom, 0)
Text("May 1, 2021 - May 5, 2021")
.font(.appSmallBody)
.fontWeight(.bold)
.textCase(.uppercase)
.foregroundColor(.init(hex: "666666"))
}
现在,如果我希望它们之间有 1px 的填充,那么填充会变得太大。这是底部填充 1 px 的结果:
如你所知,它们之间的距离绝对不是 1px,而更像是 10px。
但是,如果我将内边距增加到 2px,您几乎看不出 1px 和 2px 之间的区别:
为什么填充距离不一致?
我发现的唯一解决方法是删除padding 并使用VStack 的spacing 参数:
VStack(alignment: .leading, spacing: 1) {
Text("Exploring San Francisco")
.font(.appTitle1)
.fontWeight(.bold)
Text("May 1, 2021 - May 5, 2021")
.font(.appSmallBody)
.fontWeight(.bold)
.textCase(.uppercase)
.foregroundColor(.init(hex: "666666"))
}
但是当堆栈中有多个视图并且我想自定义每对视图之间的距离时,这并不理想。
这是一个 SwiftUI 错误吗?这个问题有更优雅的解决方法吗?谢谢!
【问题讨论】:
-
可能你想使用 EdgeInsets 而不是填充。 developer.apple.com/documentation/swiftui/edgeinsets
-
@greenhorn 我试过了,和直接使用padding效果一样。距离仍然不一致。事实上,我相信the padding function I use 是padding function with EdgeInSets 的包装器
-
您还可以为需要自定义的每一对嵌套多个具有单独间距的 VStack。
-
@greenhorn 是的,这就是我现在正在做的事情,我正在处理超过 10 个嵌套的 VStack,而且维护起来并不容易。