2

使用下面的代码可以创建一个基本的三栏 iPad 布局。

@main
struct threepanelApp: App {
    var body: some Scene {
        WindowGroup {
            NavigationView {
                List(0..<10, rowContent: { i in
                    Text(String(describing: i))
                })
                .listStyle(SidebarListStyle())
                .navigationTitle("One")
                
                List(10..<20, rowContent: { i in
                    Text(String(describing: i))
                })
                .navigationTitle("Two")

                VStack {
                    Text("Panel Three")
                }
                .navigationTitle("Three")
            }
        }
    }
}

但是,当应用程序启动时,它会以两列布局进行。

两列

我想要实现的是应用程序以三列布局启动:

三列

SwiftUI 2 可以吗?

4

2 回答 2

1

添加此扩展时,所有内容都会在应用启动时展开:

extension UISplitViewController {

    open override func viewDidLoad() {
        super.viewDidLoad()
        preferredDisplayMode = .twoBesideSecondary
    }
}
于 2021-04-15T10:08:35.290 回答
1

想出了一个hacky方法来做到这一点:

浸入UIKitonAppear,找到UISplitViewController,并设置它的preferredDisplayMode

var body: some Scene {
        WindowGroup {
            NavigationView {
                List(0..<10, rowContent: { i in
                    Text(String(describing: i))
                })
                .navigationTitle("One")

                ListTwo()

                VStack {
                    Text("Panel Three")
                }
                .navigationTitle("Three")
            }.onAppear {
                let controller = UIApplication.shared.windows.first { $0.isKeyWindow }!.rootViewController
                guard let split = controller?.children[0] as? UISplitViewController else {
                    print("not a split view")
                    return
                }
                split.preferredDisplayMode = .twoBesideSecondary
            }
        }
    }
于 2021-02-14T14:44:31.080 回答