我正在使用SwiftUI开发一个复杂的应用程序,但我创建了一个小样本工作应用程序来解释我的问题。我有一张纸/面板,上面有两个单独的列表,我无法弄清楚是什么原因导致两个列表之间有这么多空间。
面板B
在我下面的代码中,是我所说的有列表的内容
'日期时间视图'
和
'结果显示列表'
.
PanelA可能是不必要的代码,但我添加它只是为了显示我的应用程序的流程,以防任何PanelA逻辑导致它。你知道两个列表之间出现额外空间的原因是什么吗?
图片:
代码:
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
}
}
}