SwiftUI - Text минимумScaleFactor не масштабируется только при необходимости - PullRequest
2 голосов
/ 25 октября 2019

У меня есть текст, который я хочу изменить с помощью .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))

Ответы [ 2 ]

1 голос
/ 07 ноября 2019

Добавление GeometryReader вокруг VStack, в котором находились мои два текстовых представления, решило эту проблему. По запросу @gohnjanotis:

GeometryReader { proxy in
    VStack(alignment: .center, spacing: 0) {
        HStack {
            Image("medal \(self.place)").resizable()
                .foregroundColor(self.color)
                .frame(width: 40, height: 40)

            Spacer()
            Text(self.username)
                .minimumScaleFactor(0.1)
                .font(.bold(16))
                .lineLimit(1)
                .frame(alignment: .trailing)
                .foregroundColor(Color("mediumTextColor"))
                .layoutPriority(1)

        }
        .padding(.top, 10)
        .padding(.horizontal, 10)
        Spacer()
        Text(self.score)
            .font(.extraBold(60))
            .foregroundColor(self.color)
            .lineLimit(1)
            .minimumScaleFactor(0.1)
            .layoutPriority(1)
            .padding(.horizontal, 10)
            .padding(.bottom, 10)
            .offset(y: -10)
    }
    .frame(width: proxy.size.width, height: proxy.size.height, alignment: .top)
}
.frame(maxHeight: 130)
0 голосов
/ 26 октября 2019

Добавьте модификатор .layoutPriority(1) к вашему тексту, чтобы убедиться, что он занимает место, если оно есть.

...