SwiftUI-文本minimumScaleFactor仅在需要时不缩放

时间:2019-10-25 18:03:38

标签: text view scale swiftui scaling

我有一个文本,当其字符串的长度超出视图范围时,我想用.minimumScaleFactor(0.1)进行修改。但是,即使原始字体大小非常合适,缩放也会每次都适用。

我的观点如此结构:

        VStack(alignment: .center, spacing: 0) {
            HStack {
                Image("medal \(place)").resizable()
                    .foregroundColor(color)
                    .frame(width: 40, height: 40)
                Spacer()
                Text(username)
                    .font(.bold(16))
                    .lineLimit(1)
                    .minimumScaleFactor(0.1)
                    .frame(alignment: .trailing)
                    .foregroundColor(Color("mediumTextColor"))
            }
            Spacer()
            Text(score)
                .font(.extraBold(60))
                .foregroundColor(color)
                .lineLimit(1)
                .minimumScaleFactor(0.7)

            Spacer()
        }
        .frame(height: 96)
        .padding(10)
        .cornerRadius(16)
        .overlay(RoundedRectangle(cornerRadius: 16)
        .stroke(color, lineWidth: 2))

5 个答案:

答案 0 :(得分:2)

在我的两个Text视图所在的VStack周围添加GeometryReader可以解决此问题。按照@gohnjanotis的要求:

df.loc[df['T/F']].groupby('Letter')['Number'].mean()
Out[93]: 
Letter
A    8.333333
B    6.000000
Name: Number, dtype: float64

答案 1 :(得分:2)

上面回答的继续。

重要的是修饰符的应用顺序:

Text("This is a really long sentence.") 
   .minimumScaleFactor(0.5)                
   .font(.custom("OpenSans", size: 15))
   .lineLimit(1)
   .layoutPriority(1)

除非需要其他用途,否则不需要GeometryReader

答案 2 :(得分:1)

在文本中添加.lineLimit(1)会很好。

Xcode:11.3.1

答案 3 :(得分:1)

最重要的一点是.minimumScaleFactor.lineLimit(1)的组合仅在需要时才起作用。否则它将无法正常工作。 layoutPriority(1)不是这里的关键。

示例-这有效;缩放仅在需要时应用:

Text("Something").minimumScaleFactor(0.5).lineLimit(1)

答案 4 :(得分:0)

在您的文本中添加.layoutPriority(1)修饰符,以确保如果有空格,则使用空格。