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

7

我有一个 NavigationView 作为我的应用程序的根视图,它的初始状态为 .navigationViewStyle(.stack),但在导航时,我想将其样式更改为 .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
}

你有没有找到解决方案? - Rob
1
不,我最终将该视图嵌入到了一个UIKit应用程序中。 - A. Lucas
2个回答

5

DoubleColumnNavigationViewStyle是一个需要初始化的结构体。可以尝试以下方式:

.navigationViewStyle(DoubleColumnNavigationViewStyle())

2
下面的代码能够完成工作,但会丢失一些状态数据,因此可能并不是最佳解决方案。
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!")
                }
            }
        }
    }
}

我不是专家,但有些东西告诉我,在NavigationView的生命周期中无法更改样式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接