ScrollView неправильно отображает представления с помощью программы чтения геометрии

#swiftui #swiftui-scrollview

Вопрос:

У меня проблема с обзором прокрутки в SwiftUI при использовании программы чтения геометрии в тех представлениях, которые она должна представлять. У меня есть простое представление DetailsSectionViews, которое я хочу показать в виде прокрутки. В этом разделе «Просмотр деталей» требуется программа чтения геометрии, чтобы увидеть, насколько широк экран, поэтому она может настраивать виды внутри себя. Для рассматриваемой проблемы я сделал код этого раздела деталей простым.

 import SwiftUI  struct DetailSectionViews: View {    // Mark: - Properties  // Used variables  var showSplits = false    // Used contants  let columns = [GridItem(.flexible()), GridItem(.flexible())]  let shadowColor = TrackColors.baseColor.opacity(0.3)  let cellHeigthConstant = 0.5943   var body: some View {  GeometryReader { geo in  VStack(alignment: .center, spacing: 25) {  Text("This should be the header.")  .bold()    LazyVGrid(columns: columns, alignment: .center, spacing: 10) {  ForEach(0..lt;6) { index in  if index % 2 == 0 {  Text("These are the even columns in the grid.")  .frame(width: 165, height: 88)  } else {  Text("These are the odd columns in the grid come.")  .frame(width: 165, height: 88)  }  }  }  }  .background(Color(red: 247/255, green: 249/255, blue: 251/255))  }  } }  

Теперь я хочу показать эти подробные просмотры в виде прокрутки, вот так:

 import SwiftUI  struct ContentView: View {    // MARK: Properties  // Used variables  @State private var shouldDismissView = false    // Used constants  let shadowColor = TrackColors.baseColor.opacity(0.3)  let headerTitle =  NSLocalizedString(Track.trackType.uppercased(), comment: "Track type localized")    NSLocalizedString(" STATS", comment: "Stats localized.")   var body: some View {    VStack {  TopBarRow(  hasFinishedRecording: true,  runDate: "28 okt. 2021 07:26",  shouldDismisView: $shouldDismissView  )    TrackTitleView(trackName: "Some name goes in here", time: "1:07:22")  .shadow(color: shadowColor, radius: 5, x: 1, y: 1)  .padding(20)   ScrollView {  ForEach(0..lt;3) { _ in  DetailSectionViews()  }  }  }  .background(Color(red: 247/255, green: 249/255, blue: 251/255))  } }  

The result is a screen like this picture:

enter image description here

По-видимому, вид прокрутки не может оценить высоту изображений DetailsSectionViews из-за GeometryReader. Если я удалю GeometryReader в DetailsSectionViews, экран будет выглядеть так, как и ожидалось в представлении прокрутки. введите описание изображения здесь

Кто-нибудь может сказать мне, в чем проблема ScrollView с GeometryReader и как с этим бороться? Пожалуйста, не давайте мне альтернативы, чтобы не использовать GeometryReader, я хотел бы понять проблему, которую ScrollView имеет с GeometryReader.

Спасибо, МакУсерТ