SwiftUI масштабирует текст по ширине и высоте - PullRequest
0 голосов
/ 14 июля 2020

У меня несколько прямоугольников и над каждым прямоугольником текст.

прямоугольники с текстом

Теперь эти прямоугольники динамические c: они могут быть очень большими или очень маленькими, в зависимости от Geometry Reader.

Моя проблема в том, что я не могу сделать масштаб текста больше или меньше в зависимости от размера прямоугольников.

Это мой пример кода:

Я объявляю массив чисел:

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)

1 Ответ

0 голосов
/ 14 июля 2020

minimumScaleFactor и minimumFontSize неэффективны, если вы не установили adjustsFontSizeToFitWidth. Вместо создания vstack вы можете разместить все фигуры, разделенные символами новой строки, в одном тексте и подогнать текст к ограничивающему прямоугольнику.

...