在 swiftUI 中,minimumScaleFactor 用于 HStack 中的所有子元素。如何使所有子元素的字体大小彼此更接近
这是我当前的代码以及运行它的结果:
import SwiftUI
struct Test: Hashable, Decodable {
var label: String
var value: String
var key: String
}
struct TestView: View {
@State private var fields: [Test] = [
Test(label: "label1", value: "value1value1", key: "KEY1"),
Test(label: "label2", value: "value2value2value2value2value2value2value2value2value2value2value2value2", key: "KEY2"),
Test(label: "label3", value: "value3value3value3", key: "KEY3")
]
var body: some View {
HStack {
ForEach(fields.indices, id: \.self) { index in
let field = fields[index]
if index > 0 {
Spacer(minLength: 10)
}
VStack(alignment: .leading) {
Text(field.label)
.lineLimit(1)
.font(.system(size: 16, weight: .bold))
Text(field.value)
.lineLimit(1)
.minimumScaleFactor(0.4)
}
}
}
}
}
这是运行的结果:
这种情况下,标签的字体大小是固定的,vlaue就是用户以后输入的值。根据代码运行结果,我们可以看到value1和value3的字体大小会比value2的字体大小大很多(这是正确的)。我希望实现的是减小value1和value3的字体大小,使它们更接近value2的字体。这不会让它们都保持相同的字体大小,而是会让整个 HStack 显示看起来更漂亮。
这正是我所期望的:
这个问题的根本原因似乎是HStack给每个元素分配了宽度,即使文本较少,也可以分配一个大的宽度,所以文本字体大小差异较大;但我不知道如何改变HStack的这种行为,或者有其他标签可以替代HStack吗?
如果有人可以提供帮助,将不胜感激!谢谢!
如何将相同的字体大小应用于 HStack 中的多个文本并调整 HStack 的大小以适合其父级?的答案显示了一种将不同大小的文本缩放相同量的技术(这是我的答案)。基本思想是将修饰符
.scaledToFit()
应用于容器。
对于您的示例,您需要将修改器应用于外部
HStack
,而不是内部 VStack
:
// TestView
HStack {
ForEach(fields.indices, id: \.self) { index in
// ...
}
}
.scaledToFit() // 👈 added
由于您允许的最小缩放系数为 0.4,这使得所有缩放后的文本都非常小:
您可能需要考虑将最小缩放因子增加到 0.7:
Text(field.value)
.lineLimit(1)
.minimumScaleFactor(0.7) // 👈 modified