如何在 SwiftUI 中从后代视图更改 NavigationViewStyle



我的应用程序的根目录下有一个初始状态为 .navigationViewStyle(.stack)NavigationView,但在导航时,我想将该样式更改为.doubleColumn.

从我的后代的角度来看,我尝试像更改导航栏标题一样调用navigationViewStyle(.doubleColumn),但没有运气。

在根视图中尝试三元运算符也不起作用navigationViewStyle(isDoubleColumn ? .doubleColumn : .stack)

根视图:

var body: some View {
    NavigationView {
        VStack {
            //stuff
        }
    }
    .navigationViewStyle(.stack)
}

后代视图

var body: some View {
    ScrollView{
        //stuff
    }
    .navigationViewStyle(.doubleColumn) //doesn't work
}

DoubleColumnNavigationViewStyle 是一个需要初始化的结构。试试这样:

.navigationViewStyle(DoubleColumnNavigationViewStyle())

下面的代码可以完成这项工作,但代价是丢失一些状态数据,因此它可能不是真正的解决方案。

struct SwiftUIView: View {
    @State var isDoubleColumn = false
    var body: some View {
        Group {
            if isDoubleColumn{
                NavigationView {
                    Text("Hello, World!")
                }
                .navigationViewStyle(DoubleColumnNavigationViewStyle())
            } else {
                NavigationView {
                    Text("Hello, World!")
                }
            }
        }
    }
}

我不是专家,但有些事情告诉我,在导航视图生命周期内无法更改样式。

相关内容

  • 没有找到相关文章

最新更新