Выравнивание HStack без одинакового размера в SwiftUI - PullRequest
0 голосов
/ 09 июня 2019

У меня есть пользовательский график с некоторыми текстами, как показано ниже.Выравнивает первый текст правильно , выравнивает последний текст неправильно .Мне нужно, чтобы VStack с текстами растягивался как аккордеон, чтобы центр Y последнего текста совпадал с нижней частью диаграммы.

Как видно из синей подсветки Xcode, VStack получает тот же размер, что и диаграмма ссмещение.

chart image

Чтобы выровнять первый текст, я расширил VerticalAlignment, как видно из WWDC 2019 - Сессия 237 .

extension VerticalAlignment {
   private enum TopChartAndMidTitle: AlignmentID {
      static func defaultValue(in dimensions: ViewDimensions) -> Length {
         return dimensions[.top]
      }
   }
   static let topChartAndMidTitle = VerticalAlignment(TopChartAndMidTitle.self)
}

Тогда я использовал это так:

var labels = ["1900", "1800", "1700", "1600", "1500", "1400"]

var body: some View {
    HStack(alignment: .topChartAndMidTitle) {
        chart()
            .alignmentGuide(.topChartAndMidTitle) { $0[.top] }
        valueLabels()
    }
}

private func valueLabels() -> AnyView {
    AnyView(VStack {
        Text(labels[0]).font(.footnote)
            .alignmentGuide(.topChartAndMidTitle) { $0[.bottom] / 2 }
        ForEach(labels.dropFirst().identified(by: \.self)) { label in
            Spacer()
            Text(label).font(.footnote)
        }
    })
}

Вопрос: Как мне выровнять последний текст по основанию диаграммы и тем самым растянуть VStack?

Чтобы проверить это, просто замените мой пользовательский график на Rectangle().fill(Color.red).Это приведет к той же проблеме.

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