#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. Хотя это было частью моего первоначального вопроса… Буквально первое предложение: «…большой текст с кнопками под которым я хочу занять ту же ширину, что и текст»