SwiftUI 2 - 如何防止顶部部分在 macOS 和 iPadOS 的列表中关闭
Posted
技术标签:
【中文标题】SwiftUI 2 - 如何防止顶部部分在 macOS 和 iPadOS 的列表中关闭【英文标题】:SwiftUI 2 - How to prevent the top section from closing in a list in macOS and iPadOS 【发布时间】:2020-07-23 00:38:58 【问题描述】:在 SwiftUI 2 导航栏中,我有一个包含多个部分的列表。所有部分都有一个标题,但是我希望顶部永远不会关闭并且元素永远不会被隐藏。这仅要求第一个标题,并且还希望披露指示符/折叠符号消失或隐藏。
这可以在 SwiftUI 2 中完成吗? 我想让它在 macOS 和 iPadOS 上工作。
@State var agendaViews: [String] = ["Agenda", "Client", "Next Client"]
@State var treatmentViews: [String] = ["Treatment", "Products", "Merchandising"]
@State var selectionAgenda: String?
var body: some View
NavigationView
VStack
List(selection: $selectionAgenda)
Section(header: ListHeader()) // <<<<<<< For this section no Close Icon and No way to close this section.
ForEach(agendaViews, id: \.self) string in
NavigationLink(destination: DetailsView(test: string))
Text(string)
Section(header: ListHeader2(), footer: ListFooter2())
ForEach(treatmentViews, id: \.self) string in
NavigationLink(destination: DetailsView2(test: string))
Text(string)
.listStyle(SidebarListStyle())
struct ListHeader1: View
var body: some View
HStack
Image(systemName: "calendar")
Text("Agenda")
struct ListHeader2: View
var body: some View
HStack
Image(systemName: "person.3")
Text("Clienten")
struct ListFooter3: View
var body: some View
Text("===")
我希望我的问题很清楚。 一如既往,非常感谢。
添加了一些图像以显示节标题具有关闭和打开按钮。
【问题讨论】:
提供的代码快照没有关闭按钮(部分不可公开)。至少在 Xcode 12 / iPadOS 14 上进行了测试。你会提供真正的可测试代码吗? 这是代码,部分中的打开和关闭按钮是iPadOS制作的。如您所见,我可以打开和关闭这些部分。不知道你想说什么。 我仍然无法解决这个问题。使用 XCode 12 b4。有人吗? 如果您不关心所有部分都不可折叠,这里的答案为我解决了这个问题。 ***.com/questions/64350979/… 【参考方案1】:对 Section 使用可折叠视图修饰符。您的第一部分将变为:
Section(header: ListHeader())
ForEach(agendaViews, id: \.self) string in
NavigationLink(destination: DetailsView(test: string))
Text(string)
.collapsible(false)
【讨论】:
感谢您的回复。只回复我自己。我确实收到通知“ios 中不可用‘可折叠’”。那不应该是iPadOS吗?然后我有下一个问题。如何在 Xcode 12 中使用 iPadOS SDK 创建 100% iPadOS 项目? 哎呀,是的,我认为这在所有平台上都可用,但它是特定于 macOS 的。截至目前,我认为没有办法创建新的 iPadOS 特定项目。您只需要从 iOS 项目模板开始。【参考方案2】:不是真正的“答案”,但现在是我的问题的解决方案。如果有人知道更好的解决方案,请纠正我。
我确实在代码中更改了以下内容:
var body: some View
VStack
List(selection: $selectionAgenda)
ListHeader1()
ForEach(agendaViews, id: \.self) string in
NavigationLink(destination: DetailsView2(test: string))
Text(string)
Section(header: ListHeader2(), footer: ListFooter2())
ForEach(treatmentViews, id: \.self) string in
NavigationLink(destination: DetailsView2(test: string))
Text(string)
.listStyle(SidebarListStyle())
struct ListHeader1: View
var body: some View
HStack
Image(systemName: "calendar")
Text("Agenda")
.font(.title2)
struct ListHeader2: View
var body: some View
HStack
Image(systemName: "person.3")
Text("Clienten")
.font(.title2)
在文本中,我确实只删除了列表的第一部分,并仅将其替换为标题视图,瞧,在 iPad 上它目前看起来不错。
【讨论】:
以上是关于SwiftUI 2 - 如何防止顶部部分在 macOS 和 iPadOS 的列表中关闭的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI - 防止列表在项目选择时将滚动位置重置为顶部
如何防止 TextEditor 在 SwiftUI 中滚动?