[英]SwiftUI scale text to fit the width and height
我有几个矩形,每个矩形上方都有文本。
现在,这些矩形是动态的:它们可以很大,也可以很小,取决于几何阅读器。
我的问题是我不能根据矩形的大小使文本缩放更大或更小。
这是我的示例代码:
我声明了一个数字数组:
var array: [[Int]] = [
[4,5,6],
[3,4,9,6],
[4,7],
[1,2,3],
[1,5,5],
[1,2,4,5,6]]
这是身体:
GeometryReader { geo in
HStack(spacing: 0) {
ForEach(0..<6, id: \.self) { i in
ZStack(alignment: .bottom) {
LinearGradient(gradient: Gradient(colors: [Color.gray, Color.white]), startPoint: .bottom, endPoint: .top)
.frame(width: (geo.size.width - 90) / CGFloat(10), height: 90)
.overlay(Rectangle().stroke(Color.white))
.cornerRadius(8)
VStack(spacing: 0) {
ForEach(0..<self.array[i].count) { j in
Text("\(self.array[i][j])").font(.footnote)
}
}
}
}
}
}
这是我尝试过的:
我将尺寸设置得非常大,而比例因子非常小:
Text("\(self.array[i][j])").font(.system(size: 1000)).minimumScaleFactor(0.0005)
我也尝试使用固定大小:
.fixedSize(horizontal: false, vertical: false)
还有这一行:
.allowsTightening(true)
在UIKit
minimumScaleFactor
和minimumFontSize
上无效,除非您设置adjustsFontSizeToFitWidth
。
您可能不想创建VStack
,而是将所有图形(用换行符分隔)放在单个文本中,并使文本适合边界矩形。
使用SwiftUI
的解决方案如下所示:
struct aView: View {
let array = [4, 5, 6]
var body: some View {
HStack(spacing: 100) {
Text(array.map {String($0)}.joined(separator: "\n"))
.font(.system(size: 1000))
.minimumScaleFactor(0.01)
.frame(width: 60, height: 300)
.border(Color.primary)
Text(array.map {String($0)}.joined(separator: "\n"))
.font(.system(size: 1000))
.minimumScaleFactor(0.01)
.frame(width: 30, height: 150)
.border(Color.primary)
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.