В следующем примере нажатие кнопки «Развернуть» приводит к обрезанию текста «39» при изменении его размера при переходе к «40». Реальный контекст этого использования - текстовая метка, которая отражает значение выбора на анимированной диаграмме. Я бы хотел, чтобы текст занимал только необходимое ему пространство, но без ограничения, поскольку он анимирует между значениями.
Отключение анимации для метки не вариант, так как позиция метки на моей диаграмметакже оживляет.
Воспроизведение:
import SwiftUI
struct TextClipping: View {
enum ExpansionState {
case expanded
case contracted
mutating func toggle() {
switch self {
case .expanded:
self = .contracted
case .contracted:
self = .expanded
}
}
}
@State var expansion: ExpansionState = .contracted
var text: String {
switch expansion {
case .expanded:
return "40"
case .contracted:
return "39"
}
}
var body: some View {
VStack(spacing: 16) {
Text(text)
.font(.system(.title, design: .rounded))
.fontWeight(.bold)
.foregroundColor(.black)
Button(self.expansion == .contracted ? "Expand" : "Contract") {
withAnimation {
self.expansion.toggle()
}
}
}
}
}
struct TextClipping_Previews: PreviewProvider {
static var previews: some View {
TextClipping()
}
}
Есть идеи, как сделать так, чтобы текст на этикетке мог изменяться плавно, без обрезки?