在Swift / Swiftui MacCatalyst 13.0+中隐藏侧边栏

时间:2020-06-24 17:55:53

标签: ios swift mac-catalyst

我正在寻找一种在屏幕左侧隐藏侧边栏导航器的方法。这些都是在Mac Catalyst中完成的,我希望它可以在Mac Catalyst 13.0+上工作。这些视图以DoubleColumnNavigationViewStyle的形式显示,我的家是导航器,而我的第一个子视图是显示的即时视图。到目前为止,我今天也还没有找到任何有关如何执行此操作的信息。我正在使用NSToolbarDelegate和决策程序来查看要使用的布局。

这是我的工具栏代码:

#if targetEnvironment(macCatalyst)
let toolbarIdentifier = "com.example.apple-samplecode.toolbar"
let centerToolbarIdentifier = "com.example.apple-samplecode.centerToolbar"
let addToolbarIdentifier = "com.example.apple-samplecode.add"

extension SceneDelegate: NSToolbarDelegate {
    func toolbar(_ toolbar: NSToolbar, itemForItemIdentifier itemIdentifier: NSToolbarItem.Identifier, willBeInsertedIntoToolbar flag: Bool) -> NSToolbarItem? {

        if itemIdentifier == NSToolbarItem.Identifier(rawValue: toolbarIdentifier) {
            
            return NSToolbarItem(itemIdentifier: .toggleSidebar, barButtonItem: UIBarButtonItem(image: UIImage(systemName: "sidebar.left"), style: .plain, target: self, action: #selector(toggleSideBar)))
        }
        
        return nil
    }
    
    @objc func toggleSideBar(sender: NSToolbarItem) {
        print("selection changed to index: \(sender)")
        
        
    }


    @objc func toolbarGroupSelectionChanged(sender: NSToolbarItemGroup) {
        print("selection changed to index: \(sender.selectedIndex)")
    }
    
    @objc func add(sender: UIBarButtonItem) {
        print("add clicked")
    }
    
    func toolbarDefaultItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
        [NSToolbarItem.Identifier(rawValue: toolbarIdentifier), NSToolbarItem.Identifier(rawValue: centerToolbarIdentifier), NSToolbarItem.Identifier.flexibleSpace,
         NSToolbarItem.Identifier(rawValue: addToolbarIdentifier),
         NSToolbarItem.Identifier(rawValue: addToolbarIdentifier)]
    }
    
    func toolbarAllowedItemIdentifiers(_ toolbar: NSToolbar) -> [NSToolbarItem.Identifier] {
        self.toolbarDefaultItemIdentifiers(toolbar)
    }
}
#endif

如果这有帮助,那么我可以决定如何显示所有内容:

public func currentDeviceNavigationViewStyle() -> AnyView {
    #if targetEnvironment(macCatalyst)
        return AnyView(self.navigationViewStyle(DoubleColumnNavigationViewStyle()))
    #else
        return AnyView(self.navigationViewStyle(StackNavigationViewStyle()))
    #endif
}
    
public func currentDisplayView() -> AnyView {
    #if targetEnvironment(macCatalyst)
        return AnyView(macOSHomeView())
    #else
        return AnyView(Homeview())
    #endif
}

如果您需要更多信息,请告诉我,因为我还没有完成Mac Catalyst的这一部分,所以我总是愿意扩展我的问题。

0 个答案:

没有答案