如何在 macOS 中禁用侧边栏最小化?在 App Store、音乐、提醒、邮件、消息等应用程序中,此功能被禁用。在像反馈助手这样的应用程序中,存在一个严重错误 - 最小化后,除非清除 ~/Library/Containers/Feedback Assistant,否则无法打开侧边栏。
同时,如果使用NavigationView,将不会有关闭/打开侧边栏的按钮,而菜单本身可以最小化。为什么侧边栏叫导航*视图?
我见过其他线程,这是通过使用 swiftui-introspect 添加额外的依赖项来完成的,但我对此方法不满意,因为它是一个依赖项。 SwiftUI 是否如此不完整以至于没有处理 UI 元素的常用功能?为什么需要创建如此大量的抽象 AppKit、UIKit、SwiftUI?
要防止侧边栏被切换,您可以隐藏切换按钮:
.toolbar(removing: .sidebarToggle)
不幸的是,隐藏切换开关并不能阻止侧边栏通过将其边缘拖动到一侧来关闭。正如您所指出的,一旦侧边栏被隐藏,就很难将其恢复。即使应用程序重新启动,它似乎也会记住侧边栏被隐藏并使其隐藏。
我找不到防止侧边栏被拖动隐藏的方法。但是,您可以做的是将列可见性与
NavigationSplitViewVisibility
绑定相关联。然后,您可以使用 onChange
处理程序来检测侧边栏是否已隐藏并强制其再次重新打开。我发现这需要异步执行并短暂等待(1 秒似乎就足够了)。
@State private var columnVisibility = NavigationSplitViewVisibility.automatic
var body: some View {
NavigationSplitView(columnVisibility: $columnVisibility) {
Text("sidebar")
.toolbar(removing: .sidebarToggle)
} detail: {
Text("detail")
}
.onChange(of: columnVisibility, initial: true) { oldVal, newVal in
if newVal == .detailOnly {
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
columnVisibility = .doubleColumn
}
}
}
}