SwiftUI расширяет или пересчитывает высоту VStack при расширении дочерних представлений

У меня есть прокрутка, которая содержит «карточки» с информацией о погоде в местах, и карты расширяются, чтобы отображать больше информации при нажатии.

Я должен использовать LegacyScrollView, чтобы нижний лист, охватывающий прокрутку, перетаскивался вниз, когда прокрутка находится вверху.

Я не могу понять, как расширить VStack, когда расширяется одна из карт. Есть ли способ заставить GeometryReader или VStack пересчитать необходимую высоту для хранения всех представлений?

Я начинаю с minHeight, установленного на размер окна, поэтому, когда 1-я карта расширяется, все отображается, но 2 или более выходят за пределы окна LazyVStack и обрезаются.

Если для параметра minHeight в LaxyVStack не установлено значение 0, ячейки расширяются от середины, а их вершины обрезаются. Когда он установлен на 0, ячейки расширяются вниз по желанию.

      GeometryReader { proxy in
  LegacyScrollView(.vertical, showsIndicators: false) {
    Spacer(minLength: 40)
    LazyVStack(spacing: 0) {
      ForEach(mapsViewModel.placedMarkers, id: \.id) { _placeObject1 in

        InfoCell(placeObject: _placeObject1)
          .environmentObject(mapsViewModel)
          .frame(alignment: .top)

        Divider().foregroundColor(.white)
      }
    }
    .cornerRadius(25)
    .frame(minHeight: 0, alignment: .top) 
    }
    .onGestureShouldBegin{ pan, scrollView in
      scrollView.contentOffset.y > 0 || pan.translation(in: scrollView).y < 0
    }
    .onScroll{ test in
      print(test.contentOffset.y)
    }
    .padding(.top, 30) //padding for top of list                  
}

и код ячейки:

      struct InfoCell: View {
    @StateObject var placeObject: PlaceInfo

    @State var expandCell = false

    var body: some View {
        VStack(alignment: .center, spacing: 0) {

            //blahblah
            
            if expandCell {
                CellExpanded(placeObject: placeObject, isFirstInList: true)   
            }
        }
        .frame(maxWidth: .infinity)
        .onTapGesture {
            withAnimation { expandCell.toggle() }
        }  
    }
}

и код расширения:

      struct InfoCellExpanded: View {
    @State var forecast = "Daily"
    var placeObject: PlaceInfo
    var isFirstInList: Bool
    
    var body: some View {
        VStack {
           //blah
        }
        .padding(.horizontal, 10)
        .padding(.bottom, 20)
    }
}

0 ответов

Другие вопросы по тегам