SwiftUI -删除两个列表之间的空格(iOS 16)

new9mtju  于 12个月前  发布在  Swift
关注(0)|答案(1)|浏览(105)

我正在使用SwiftUI开发一个复杂的应用程序,但我创建了一个小的示例应用程序来解释我的问题。我有一个工作表/面板,其中有2个单独的列表,我无法弄清楚是什么导致2个列表之间有这么多的空间。
下面的代码中的PanelB就是我所讨论的,它有列表“DateTimeView”* 和“ResultsDisplayList”*。
PanelA可能是不必要的代码,但我只是添加它来显示我的应用程序的流程,以防任何PanelA逻辑导致它。

  • 图片:*

x1c 0d1x的数据

  • 验证码:*
import SwiftUI
import Foundation

struct ContentView: View {
    @State var showPanel: Bool = false
    var body: some View {
       NavigationStack {
            VStack {
                Text("Hello World - Click Me").font(.largeTitle).foregroundColor(.blue)
                    .onTapGesture {
                        self.showPanel = true
                    }
            }.sheet(isPresented: $showPanel) {
                ZStack {
                    Color.secondary
                    PanelA().padding(.top, 15.0)
                }
            }
       }
    }
}
    
struct PanelA: View {
    @State var showPanel: Bool = false
    var body: some View {
        NavigationStack {
            VStack {
                Button {
                    showPanel = true
                } label: {
                    Text("Click Me")
                }
                .buttonBorderShape(.roundedRectangle(radius: 15.0))
                .padding()
                .background(Color.teal)
            }
            .presentationDetents([.medium, .large])
            .presentationBackgroundInteraction(.enabled)
            .navigationDestination(isPresented: $showPanel) {
                PanelB()
            }
        }
    }
}

struct PanelB: View {
    var body: some View {
        ZStack {
           Color.purple.edgesIgnoringSafeArea(.all)
            VStack {
                DateTimeView().padding(.bottom, 20.0)
                ResultsDisplayList()
                Spacer()
            }
            .frame(maxWidth: .infinity, maxHeight: .infinity)
            .background(Color.purple)
        }
    }
}

struct DateTimeView: View {
    @State private var startDateTime = Date.now
    @State private var isAllDay = true

    var body: some View {
        List {
            Section("Event Date".uppercased()) {
                Toggle("all day", isOn: $isAllDay)
                DatePicker(selection: $startDateTime, in: startDateTime..., displayedComponents: [.date]) {
                    Text("select date time").font(.body).foregroundColor(Color.black)
                }
            }
        }
        .listStyle(.insetGrouped)
    }
}

struct ResultsDisplayList: View {
    let results = ["Apple", "Orange", "Pineapple", "Cherries", "Strawberries", "Banana"]
    var body: some View {
        ScrollViewReader { _ in
            VStack(alignment: .leading, spacing: 8.0) {
                List {
                    Section {
                        ForEach(results, id: \.hashValue) { result in
                            Text(result).font(.body)
                        }
                    } header: {
                        Text("Results List")
                    }
                }
            }
        }
        .onAppear {
            UITableView.appearance().backgroundColor = .clear
            UITableViewCell.appearance().backgroundColor = .clear
        }
    }
}

字符串

z31licg0

z31licg01#

这很可能是因为您使用了两个List(在添加到视图时占用所有可用空间,以及VStack和ScrollView)。
看起来ScrollViewReader和你添加到结果中的VStack没有用。尝试使用一个list示例来 Package 你的所有部分。
如果您期望的布局需要这些 Package 器(List不支持这些 Package 器作为子项),您可能需要提取DateTimeView并使用List以外的东西重新创建ui。

相关问题