SwiftUI Текстовые клипы при изменении размера - PullRequest
1 голос
/ 20 октября 2019

В следующем примере нажатие кнопки «Развернуть» приводит к обрезанию текста «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()
    }
}

Есть идеи, как сделать так, чтобы текст на этикетке мог изменяться плавно, без обрезки?

...