#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:
По-видимому, вид прокрутки не может оценить высоту изображений DetailsSectionViews из-за GeometryReader. Если я удалю GeometryReader в DetailsSectionViews, экран будет выглядеть так, как и ожидалось в представлении прокрутки.
Кто-нибудь может сказать мне, в чем проблема ScrollView с GeometryReader и как с этим бороться? Пожалуйста, не давайте мне альтернативы, чтобы не использовать GeometryReader, я хотел бы понять проблему, которую ScrollView имеет с GeometryReader.
Спасибо, МакУсерТ