在swiftUI中,一旦设置了minimumScaleFactor,文本如何均匀显示

问题描述 投票:0回答:1

在 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)
        }
      }
    }
  }
}

这是运行的结果:

234

这种情况下,标签的字体大小是固定的,vlaue就是用户以后输入的值。根据代码运行结果,我们可以看到value1和value3的字体大小会比value2的字体大小大很多(这是正确的)。我希望实现的是减小value1和value3的字体大小,使它们更接近value2的字体。这不会让它们都保持相同的字体大小,而是会让整个 HStack 显示看起来更漂亮。

这正是我所期望的:

That's what I expected

这个问题的根本原因似乎是HStack给每个元素分配了宽度,即使文本较少,也可以分配一个大的宽度,所以文本字体大小差异较大;但我不知道如何改变HStack的这种行为,或者有其他标签可以替代HStack吗?

如果有人可以提供帮助,将不胜感激!谢谢!

ios swiftui
1个回答
0
投票

如何将相同的字体大小应用于 HStack 中的多个文本并调整 HStack 的大小以适合其父级?的答案显示了一种将不同大小的文本缩放相同量的技术(这是我的答案)。基本思想是将修饰符

.scaledToFit()
应用于容器。

对于您的示例,您需要将修改器应用于外部

HStack
,而不是内部
VStack

// TestView

HStack {
    ForEach(fields.indices, id: \.self) { index in
        // ...
    }
}
.scaledToFit() // 👈 added

由于您允许的最小缩放系数为 0.4,这使得所有缩放后的文本都非常小:

Screenshot

您可能需要考虑将最小缩放因子增加到 0.7:

Text(field.value)
    .lineLimit(1)
    .minimumScaleFactor(0.7) // 👈 modified

Screenshot

© www.soinside.com 2019 - 2024. All rights reserved.