SwiftUI HStack с равной высотой - PullRequest
       0

SwiftUI HStack с равной высотой

0 голосов
/ 21 февраля 2020

Я хочу, чтобы Text("111") имел равную высоту VStack, содержащую 2222 ... и 333 ....

struct Test7: View {
  var body: some View
  { HStack (alignment: .top) {
    Text( "111")                     // Shall have equal Height
    .background(Color.red)
    VStack(alignment: .leading){.    // of this VStack
      Text("2222222")
      .background(Color.gray)
      Text("333333333")
      .background(Color.blue)
    }
  }
  .background(Color.yellow)}
}

Я пробовал с GeometryReader, но не смог заставить его работать

1 Ответ

2 голосов
/ 22 февраля 2020

Здесь возможен подход с использованием .alignmentGuide

demo

struct Test7: View {
    @State private var height: CGFloat = .zero // < calculable height
  var body: some View
  { HStack (alignment: .top) {
    Text( "111")                     
        .frame(minHeight: height)    // in Preview default is visible
        .background(Color.red)
    VStack(alignment: .leading) {    
      Text("2222222")
      .background(Color.gray)
      Text("333333333")
      .background(Color.blue)
    }
    .alignmentGuide(.top, computeValue: { d in
        DispatchQueue.main.async { // << dynamically detected - needs to be async !!
            self.height = max(d.height, self.height)
        }
        return d[.top]
    })
  }
  .background(Color.yellow)}
}

Примечание: реальный результат виден только в LivePreview, поскольку высота рассчитывается динамически и присваивается в следующем цикле рендеринга. чтобы избежать конфликтов на @ State.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...