我正在寻找一种在屏幕左侧隐藏侧边栏导航器的方法。这些都是在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的这一部分,所以我总是愿意扩展我的问题。