编辑:此方法截至 2022 年末仍然有效,并且从未停止在任何版本的 macOS 上工作(直到最新的 Ventura 13.1)。不知道为什么这里有答案提出其他建议。如果 Introspection 库更改了其 API,您可能需要相应地更新您的调用,但解决方案的要点是相同的。
使用此 SwiftUI Introspection 库: https://github.com/siteline/SwiftUI-Introspect
我们可以通过扩展它们的功能来反思底层NSSplitView
:
public func introspectSplitView(customize: @escaping (NSSplitView) -> ()) -> some View {
return introspect(selector: TargetViewSelector.ancestorOrSibling, customize: customize)
}
Run Code Online (Sandbox Code Playgroud)
然后创建一个通用扩展View
:
public extension View {
func preventSidebarCollapse() -> some View {
return introspectSplitView { splitView in
(splitView.delegate as? NSSplitViewController)?.splitViewItems.first?.canCollapse = false
}
}
}
Run Code Online (Sandbox Code Playgroud)
可以在我们的侧边栏上使用:
var body: some View {
(...)
MySidebar()
.preventSidebarCollapse()
}
Run Code Online (Sandbox Code Playgroud)