Текст SwiftUI не сжимается с помощью .FixedSize()

#swift #text #swiftui

Вопрос:

Я работаю над приложением с большим текстом с кнопками под ним, которые я хочу занять ту же ширину, что и текст. Мое решение состоит в том, чтобы использовать a VStack с .fixedSize() модификатором:

 VStack {
    Text(viewModel.timeString)
        .animation(nil)
        .minimumScaleFactor(0.1)
        .lineLimit(1)
        .font(.system(size: 100, design: .monospaced))
        .padding(.vertical, -20)
    TimerActionsCompact(viewModel: viewModel) // the 3 buttons
}
.fixedSize()
 

Это дает тот результат, который я хочу:

введите описание изображения здесь

Однако, когда текст становится слишком большим, он просто исчезает с экрана вместо того, чтобы уменьшаться, хотя я minimumScaleFactor и lineLimit установил.

Я обнаружил , что проблема заключалась .fixedSize() в том, что удаление ее приводило к правильному сжатию текста.

Я делаю что-то не так, или это может быть ошибка в SwiftUI? Если да, то есть ли какой-либо обходной путь?

Спасибо!

Ответ №1:

Один из возможных способов использования модификатора кадра, как в этом примере:

 struct ContentView: View {
    
    @State private var string: String = "0.0"
    
    var body: some View {
        
        Text(string)
            .font(.system(size: 100, design: .monospaced))
            .minimumScaleFactor(0.1)
            .lineLimit(1)
            .frame(width: 200, height: 80) // give your custom size here as you like!
            .background(Color.gray.cornerRadius(10.0))
            .animation(nil, value: string)
        
        Button("add") { string  = String(describing: Int8.random(in: 0...9)) }.padding()
        
    }
    
}
 

введите описание изображения здесь

Комментарии:

1. Это помогает уменьшить текст, когда он становится большим, но так как он имеет фиксированный размер из-за рамки, кнопки не адаптируются, чтобы быть такой же ширины, как текст, побеждая точку .fixedSize()

2. Так ты хочешь, чтобы кнопки тоже уменьшились? это было бы другой проблемой и другим вопросом.

3. Я просто хочу, чтобы кнопки всегда были одинаковой длины с текстом. Но они не должны уменьшаться, так как текст уменьшается только тогда, когда он становится длиннее, поэтому остается одинаковой ширины. Если это другая проблема, знаете ли вы, как я мог бы ее решить?

4. Да, конечно, я могу решить эту проблему, но я не уверен, понял ли я, чего вы действительно хотите.

5. Хотя это было частью моего первоначального вопроса… Буквально первое предложение: «…большой текст с кнопками под которым я хочу занять ту же ширину, что и текст»