ios - SwiftUI - 所有可见的 3 列/侧边栏布局?

标签 ios swift macos swiftui swiftui-navigationview

我正在试验 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 :
enter image description here
我必须点击后退按钮才能使布局看起来像这样:
enter image description here
我真正想要的是同时显示所有 3 列,而无需点击后退按钮或任何东西,至少在 iPad 处于横向模式时是这样。一个示例如下所示:
enter image description here
谁能解释我如何实现这样的布局?当我的应用程序在 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/

相关文章:

c# - 单声道在 OS X 上缺少 HttpUtility?

ios - 从另一个 View Controller 访问后使 NSTimer 对象无效

ios - 初始输入后计算器卡住

ios - 无法使用类型为 'String' 的参数列表调用类型为 '(CustomObject)' 的初始值设定项

ios - 根据属性删除数组中的特定对象?

objective-c - 更改 NSButton 的背景颜色

Qt 中的 cocoa 纹理窗口

ios - 选中时的 Tabman Image Tint 颜色

iphone - 滚动 uitableview 时 UIProgressView 被隐藏

ios - swift - JSON 到 CoreData