ios - SwiftUI - 全部可见的 3 列/侧边栏布局?
问题描述
我正在试验 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 个导航列,然后是更大的内容视图),但最初会产生如下所示的视图:
我必须点击后退按钮才能使布局看起来像这样:
我真正想要的是所有 3 列同时可见,无需点击后退按钮或任何东西,至少在 iPad 处于横向模式时。一个示例如下所示:
谁能解释我如何实现这样的布局?我希望它在我的应用程序在 macOS 上运行或在 iPad 上以横向模式运行时处于活动状态。在纵向模式下,我可以使用第一个屏幕截图中显示的导航样式,但希望所有窗格都可见。有任何想法吗?
解决方案
更新:更好的解决方案
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
))
}
}
推荐阅读
- python - 我如何用一个正在克隆的盒子做一个正确的列表?
- c# - 如何通过 windows 命令创建文件链接并在该链接的目录中定义开始?
- r - 在 Shiny App 的右侧嵌入图像徽标
- rust - 我怎么知道堆栈和堆上是否有东西?
- android - android.permission.ACTIVITY_RECOGNITION 和谷歌有什么区别?
- python - 从字母表中枚举长度为 K 的字符串
- python - 如何从python中的列表中打印特定行
- java - 比较 TSV 数据集以了解数据库中的更改
- python - 如何在python中设置等于零的范围内的所有值
- python-3.x - 有没有办法在测试结束时仅由第一个用户执行某些操作?