SwiftUI:使用 Sidebar Visible 启动三列 iPad 应用程序
Posted
技术标签:
【中文标题】SwiftUI:使用 Sidebar Visible 启动三列 iPad 应用程序【英文标题】:SwiftUI: Launching three column iPad app with the Sidebar Visible 【发布时间】:2021-02-14 09:36:02 【问题描述】:使用下面的代码可以创建一个基本的三栏 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 可以做到吗?
【问题讨论】:
我认为当前默认的NavigationView
行为是不可能的。您可以做的是使用HStack
制作自己的专栏,并使用GeometryReader
制作一些专栏。
@eeeke 我想出了一个方法来做到这一点(见下面的答案)。
【参考方案1】:
想出了一个 hacky 方法来做到这一点:
在 .onAppear
中搜索UIKit
,找到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
【讨论】:
【参考方案2】:添加此扩展时,所有内容都会在应用启动时展开:
extension UISplitViewController
open override func viewDidLoad()
super.viewDidLoad()
preferredDisplayMode = .twoBesideSecondary
【讨论】:
以上是关于SwiftUI:使用 Sidebar Visible 启动三列 iPad 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
css Genesis Swap将Primary Sidebar放入Secondary Sidebar位置(最好使用CSS)
css Genesis Swap将Primary Sidebar放入Secondary Sidebar位置(最好使用CSS)