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 中滚动?

SwiftUI 滚动视图部分显示 Mac 应用程序中的最后一项

iOS:如何在 SwiftUI 页面顶部制作我的图像徽标

如何在 SwiftUI 中停止快速移动视图的频闪

如何在swiftUI中删除顶部安全区域