微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SwiftUI:使用侧边栏 Visible 启动三列 iPad 应用程序

如何解决SwiftUI:使用侧边栏 Visible 启动三列 iPad 应用程序

使用下面的代码可以创建一个基本的三列 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")
            }
        }
    }
}

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

Two Column

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

Three Column

这可以通过 SwiftUI 2 实现吗?

解决方法

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

浸入 .UIKit 中的 onAppear,找到 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
            }
        }
    }
,

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

extension UISplitViewController {

    open override func viewDidLoad() {
        super.viewDidLoad()
        preferredDisplayMode = .twoBesideSecondary
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。