我正在使用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
}
}
}
字符串
1条答案
按热度按时间z31licg01#
这很可能是因为您使用了两个List(在添加到视图时占用所有可用空间,以及VStack和ScrollView)。
看起来
ScrollViewReader
和你添加到结果中的VStack
没有用。尝试使用一个list示例来 Package 你的所有部分。如果您期望的布局需要这些 Package 器(List不支持这些 Package 器作为子项),您可能需要提取
DateTimeView
并使用List以外的东西重新创建ui。