我正在试验 SwiftUI 对多列侧边栏布局的新支持。我知道我可以做这样的事情:
struct SidebarContentView: View {
var body: some View {
NavigationView {
List {
ForEach(0...5, id: \.self) { i in
Text("\(i)")
}
}
.listStyle(SidebarListStyle())
.navigationTitle("List 1")
List {
ForEach(0...5, id: \.self) { i in
Text("\(i)")
}
}
.navigationTitle("List 2")
Text("Hello world")
.font(.largeTitle)
.navigationTitle("Content")
}
.navigationViewStyle(DoubleColumnNavigationViewStyle())
}
}
创建我的 3 列布局(2 个导航列,然后是一个更大的内容 View ),但最初会产生一个如下所示的 View :我必须点击后退按钮才能使布局看起来像这样:
我真正想要的是同时显示所有 3 列,而无需点击后退按钮或任何东西,至少在 iPad 处于横向模式时是这样。一个示例如下所示:
谁能解释我如何实现这样的布局?当我的应用程序在 macOS 上运行或在 iPad 上以横向模式运行时,我希望它处于事件状态。在纵向模式下,我可以使用第一个屏幕截图中显示的导航样式,但希望所有 Pane 都可见。有任何想法吗?
最佳答案
更新:更好的解决方案
extension UISplitViewController {
open override func viewDidLoad() {
super.viewDidLoad()
self.show(.primary)
}
}
============================看看这个github项目:SwiftUI-Introspect
import Introspect
@main
struct ExampleApp: App {
var body: some Scene {
WindowGroup {
NavigationView {
Text("Primary View")
Text("Supplementary View")
Text("Secondary View")
// show primary view at startup
.introspectSplitViewController(customize: { splitViewController in
splitViewController.show(.primary)
})
}
}
}
}
// Implement UISplitViewControlle selector
extension View {
public func introspectSplitViewController(customize: @escaping (UISplitViewController) -> ()) -> some View {
return inject(UIKitIntrospectionViewController(
selector: { introspectionViewController in
// Search in ancestors
if let splitViewController = introspectionViewController.splitViewController {
return splitViewController
}
// Search in siblings
return Introspect.previousSibling(containing: UISplitViewController.self, from: introspectionViewController)
},
customize: customize
))
}
}
关于ios - SwiftUI - 所有可见的 3 列/侧边栏布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66860456/