问题复现
在SwiftUI兼容多语种文字时,如果是内容比较长的语种,可以使用lineLimit进行限制,比如下图的德语,限制为3行。
但是,lineLimit有一个副作用,那就是显示内容为一行时,文字内容会被缩放的很小。
这一问题同样发生在iPad上。
可以看到实际的详细信息内容文字很小,而图标下的文字是正常大小。
当隐藏 lineLimit 和 minimumScaleFactor 修饰符后,文字显示正常。
解决方案
当内容无法达到lineLimit限制的行数,或者为1行显示时,minimumScaleFactor 会强制将内容缩放至最小比例,从而显示出现问题。
为避免文字内容被不必要地缩放,可以在特定条件下动态调整 minimumScaleFactor 或在 lineLimit 设定中增加灵活性:
1、设置minHeight高度
Text("Save the desired items, record every savings, and make your wishes come true.")
.font(.footnote)
.foregroundColor(.gray)
.lineLimit(3)
.minimumScaleFactor(0.3)
.frame(minHeight: 16) // 设置最低高度
2、设置fixedSize防止被压缩
VStack(alignment: .leading) {
Text("Save the desired items, record every savings, and make your wishes come true.")
.font(.footnote)
.foregroundColor(.gray)
.lineLimit(3)
.minimumScaleFactor(0.3)
.fixedSize(horizontal: false, vertical: true) // 防止文字水平压缩
}
但是 fixedSize 可能会导致布局发生变化。
3、修改缩放比例
如果视图区域能够容纳比较多的文字内容,可以尝试修改minimumScaleFactor的缩放比例。
例如,设置为0.8,尽可能的完整显示文字内容:
.minimumScaleFactor(0.8) // 最小缩放到 80%