【问题标题】:SwiftUI scale text to fit the width and heightSwiftUI 缩放文本以适应宽度和高度
【发布时间】:2020-07-14 07:08:33
【问题描述】:

我有几个矩形,每个矩形上方都有文字。

现在,这些矩形是动态的:它们可以很大,也可以很小,具体取决于几何阅读器。

我的问题是我不能根据矩形的大小来放大或缩小文本。

这是我的示例代码:

我声明了一个数字数组:

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)

【问题讨论】:

    标签: ios swift text swiftui


    【解决方案1】:

    UIKit minimumScaleFactorminimumFontSize 上无效,除非您设置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)
            }
        }
    }
    

    【讨论】:

    • 如何调整字体大小以适应宽度?我找了这个修饰符,但没有找到
    • adjustsFontSizeToFitWidth 正是这样做的,自动减小字体大小以使文本适合宽度(并受 minimumScaleFactor 或 minimumFontSize 限制)
    • 您可以在 Interface Builder 中尝试:创建标签,设置大字体,并在 Autoshrink 下设置最小字体大小。当您更改标签的宽度时,您会看到文本缩小。
    • 我正在使用 swiftui
    • let array = [4, 5, 6] var body: some View { HStack(spacing: 100) { Text(array.map({ String($0) }).joined(分隔符:"\n")).font(.system(size: 1000)).minimumScaleFactor(0.01).frame(width: 60, height: 300) Text(array.map({ String($0) }).joined (分隔符: "\n")).font(.system(size: 1000)).minimumScaleFactor(0.01).frame(width: 30, height: 150) } }
    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 2018-02-28
    • 2013-11-05
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    相关资源
    最近更新 更多