SwiftUI: VStack в VStack, ярлыки усекаются - PullRequest
2 голосов
/ 22 апреля 2020

У меня проблема с SwiftUI. Когда я использую несколько VStack внутри другого VStack, у меня возникают странные проблемы с усечением текста.

Вот самый маленький воспроизводимый пример:

VStacks inside VStack

Метка "B" усечена, но не должна быть. Если я изменяю текст «A» или текст «B», добавляя или удаляя некоторые буквы, метка «B» иногда глючит, иногда в порядке.

VStacks animation

Вот соответствующий код:

struct ContentView: View {
    var body: some View {
        VStack {
            VStack {
                Text("AAAAAAAAAAAAAAAAAAAA")
            }.background(Color.yellow)
            VStack {
                Text("BBBBBBBB")
                Text("CCC")
            }.background(Color.orange)
        }.background(Color.blue)
    }
}

Я что-то пропустил или это ошибка SwiftUI?

Спасибо!

Environment : Xcode 11.4.1, iOS 13.4.1, протестировано на Previews, Simulator & Devices

Edit : Это ведет себя по-разному в зависимости от устройства предварительного просмотра / симулятора, которое вы используете , Например, приведенный выше код, скопированный в проект fre sh, содержит ошибки iPhone 11 Pro / 11 Pro Max и 8+. На iPhone 8/11 / SE 1 & 2 это работает нормально. Так, может быть, это связано с некоторыми вычислительными / округляющими проблемами в механизме разметки SwiftUI?

1 Ответ

0 голосов
/ 22 апреля 2020

.fixedSize(horizontal: true, vertical: false) должен исправить это.

struct ContentView: View {
    var body: some View {
        VStack {
            VStack {
                Text("AAAAAAAAAAAAAAAAAAAA")
                  .fixedSize(horizontal: true, vertical: false)
            }.background(Color.yellow)
            VStack {
                Text("BBBBBBBB")
                   .fixedSize(horizontal: true, vertical: false)
                Text("CCC")
                   .fixedSize(horizontal: true, vertical: false)
            }.background(Color.orange)
        }.background(Color.blue)
    }
}

Для мультитекста: .fixedSize(horizontal: false, vertical: true)

struct ContentView2: View {
    var body: some View {
        VStack {
            VStack {
                Text("Swift enums are really powerful, but they can often be made even more capable when mixed with")
                  .fixedSize(horizontal: false, vertical: true)
                  .multilineTextAlignment(.center)
            }.background(Color.yellow)
            VStack {
                Text("Swift enums are really powerful, but they can often be made even more capable when mixed ")
                   .fixedSize(horizontal: false, vertical: true)
                   .multilineTextAlignment(.center)
                Text("Swift enums are really powerful, but they can often be made even more capable   ")
                   .fixedSize(horizontal: false, vertical: true)
                   .multilineTextAlignment(.center)
            }.background(Color.orange)
        }.background(Color.blue)
    }
}

struct ContentView2_Previews: PreviewProvider {
  static var previews: some View {
    ContentView2()
  }
}
...