Ios SwiftUI在NavigationViewStyles之间切换

Ios SwiftUI在NavigationViewStyles之间切换,ios,swift,swiftui,uikit,Ios,Swift,Swiftui,Uikit,我想将列表的嵌套列表显示为树或网格。虽然苹果树在iPad的分割视图中看起来不错,但网格太大了,无法容纳 因此,我希望在网格显示模式下使用StackNavigationViewStyle和在树显示模式下使用DefaultNavigationViewStyle呈现此视图 我有一个切换开关showList来存储模式,我想使用at切换到导航视图样式,如下所示: .navigationViewStyle(self.showList ? DefaultNavigationViewStyle() : Stac

我想将列表的嵌套列表显示为树或网格。虽然苹果树在iPad的分割视图中看起来不错,但网格太大了,无法容纳

因此,我希望在网格显示模式下使用
StackNavigationViewStyle
和在树显示模式下使用
DefaultNavigationViewStyle
呈现此视图

我有一个切换开关
showList
来存储模式,我想使用at切换到导航视图样式,如下所示:

.navigationViewStyle(self.showList ? DefaultNavigationViewStyle() : StackNavigationViewStyle())
但编译器抱怨说:

“?:”中的结果值表达式具有不匹配的类型 “DefaultNavigationViewStyle”和“StackNavigationViewStyle”

即使两者都继承自
NavigationViewStyle


甚至可以在导航视图样式之间切换吗?或者,一旦我选择了一种样式,我就必须在该视图中使用它?

您不能在
导航视图样式
修改器中使用三元运算符,因为样式有不同的类型,但您可以使用如下自定义修改器

extension NavigationView {
    @ViewBuilder
    func switchStyle(if flag: Bool) -> some View {
        if flag {
            self.navigationViewStyle(DefaultNavigationViewStyle())
        } else {
            self.navigationViewStyle(StackNavigationViewStyle())
        }
    }
}