我想使用 SwiftUI 构建一个非常简单的 iOS 14 侧边栏。
设置很简单,我有三个视图HomeView
, LibraryView
and SettingsView
和代表每个屏幕的枚举。
enum Screen: Hashable {
case home, library, settings
}
我的最终目标是根据尺寸类别在选项卡视图和侧边栏之间自动切换,但有些事情并不完全按预期工作。
全球国家由MainNavigationView
,这也是我的根视图WindowGroup
.
struct MainNavigationView: View {
@State var screen: Screen? = .home
var body: some View {
NavigationView {
SidebarView(state: $screen)
}
.navigationViewStyle(DoubleColumnNavigationViewStyle())
}
}
The SidebarView
是一个简单的List
包含三个NavigationLink
, 每人一个Screen
.
struct SidebarView: View {
@Binding var state: Screen?
var body: some View {
List {
NavigationLink(
destination: HomeView(),
tag: Screen.home,
selection: $state,
label: {
Label("Home", systemImage: "house" )
})
NavigationLink(
destination: LibraryView(),
tag: Screen.library,
selection: $state,
label: {
Label("Library", systemImage: "book")
})
NavigationLink(
destination: SettingsView(),
tag: Screen.settings,
selection: $state,
label: {
Label("Settings", systemImage: "gearshape")
})
}
.listStyle(SidebarListStyle())
.navigationTitle("Sidebar")
}
}
我用NavigationLink(destination:tag:selection:label)
初始化程序,以便在我的中设置所选屏幕MainNavigationView
这样我就可以将其重新用于我的TabView
later.
然而,很多事情并不完全按照预期进行。
首先,在纵向模式iPad(我使用iPad Pro 11英寸模拟器)中启动应用程序时,启动应用程序时没有选择屏幕。只有在我点击之后Back在导航栏中,显示初始屏幕并显示我的主视图。
第二个奇怪的事情是绑定似乎设置为nil
每当侧边栏被隐藏时。在横向模式下,视图按预期工作,但是当将侧边栏切换为隐藏然后再次显示时,选择会丢失。
内容视图保持正确,但侧边栏选择丢失。
这些只是SwiftUI
错误或者是否有不同的方法来创建带有Binding
?