Macos 如何切换NavigationView第三个窗格的可见性?

Macos 如何切换NavigationView第三个窗格的可见性?,macos,swiftui,appkit,Macos,Swiftui,Appkit,假设使用以下NavigationView: Struct ContentView:View{ @状态变量showRigthPane:Bool=true var body:一些观点{ 导航视图{ 边栏() 中间窗格() 右窗格() }.工具栏{ 工具栏项(位置:。导航){ 按钮(操作:toggleSidebar,标签:{Image(systemName:“sidebar.left”)}) } 工具栏项(位置:.primaryAction){ 按钮(操作:self.toggleRightPane,标

假设使用以下NavigationView:

Struct ContentView:View{
@状态变量showRigthPane:Bool=true
var body:一些观点{
导航视图{
边栏()
中间窗格()
右窗格()
}.工具栏{
工具栏项(位置:。导航){
按钮(操作:toggleSidebar,标签:{Image(systemName:“sidebar.left”)})
}
工具栏项(位置:.primaryAction){
按钮(操作:self.toggleRightPane,标签:{Image()})
}
}
}
private func toggleRightPane(){
// ?
}
//折叠侧边栏-这是有效的
private func toggleSidebar(){
NSApp.keyWindow?.initialFirstResponder?.tryToPerform(
#选择器(NSSplitViewController.toggleSidebar(:)),带:nil)
}
}

如何实现
toggleRightPane()
函数来切换右窗格的可见性?

更新后的使用返回两个不同导航视图的计算属性。侧边栏的行为仍然很奇怪,但有了一个解决方案,它就可以正常工作了。希望有人能找出侧边栏的行为

struct ToggleThirdPaneView: View {
    @State var showRigthPane: Bool = true
    
    var body: some View {
        VStack {
            navigationView
        }
        .navigationTitle("Show and Hide")
    }
    
    var navigationView : some View {
        if showRigthPane {
            return AnyView(NavigationView {
                VStack {
                    Text("left")
                }
                .toolbar {
                    Button(action: { showRigthPane.toggle() }) {
                        Label("Add Item", systemImage: showRigthPane ? "rectangle.split.3x1" : "rectangle.split.2x1")
                    }
                }
                Text("middle")
            }
            )
        } else {
            return AnyView(NavigationView {
                VStack {
                    Text("left")
                }
                .toolbar {
                    Button(action: { showRigthPane.toggle() }) {
                        Label("Add Item", systemImage: showRigthPane ? "rectangle.split.3x1" : "rectangle.split.2x1")
                    }
                }
                Text("middle")
                Text("right")
            })
        }
    }
}
尝试以下操作(无法测试)

struct ContentView:View{
@状态私有变量showRigthPane=true
var body:一些观点{
导航视图{
边栏()
中间窗格()

如果showRigthPane{//此方法不关闭右窗格拆分(这是NavigationView的第三个窗格)。因此,即使在切换了
showRightPane
boolean之后,您的代码仍然有三个窗格,而第三个窗格现在只有一个空视图。代码已经更新。关闭,但仍然不是100%。请尝试一下。是的,这种方法很有效,但就像您所说的侧边栏看起来很奇怪。我认为解决方案是调用NSSplitViewCont滚动并折叠侧视图,虽然我不知道如何操作。我将编辑我的问题,以显示当前如何关闭侧栏拆分,也许会有帮助。不幸的是,这不起作用,仍然显示三个拆分,右窗格在切换后为空。
struct ContentView: View {
   @State private var showRigthPane = true 

   var body: some View {
       NavigationView {
           Sidebar()
           MiddlePane()
           if showRigthPane {    // << here !!
               RightPane()
           }
       }.toolbar {
           ToolbarItem(placement: .primaryAction) {
               Button(action: self.toggleRightPane, label: { Image() })
           }
       }
   }

   private func toggleRightPane() {
       withAnimation {
          self.showRigthPane.toggle()     // << here !!
       }
   }
}