【问题标题】:Remove the text from back button in SwiftUI从 SwiftUI 中的后退按钮中删除文本
【发布时间】:2020-07-10 01:54:39
【问题描述】:

简而言之,我想do this,但使用 SwiftUI。

首页应该被移除)

到目前为止,我还没有找到直接访问NavigationBarButton 的方法,并且设法找到以下似乎是迄今为止我能找到的修改按钮的唯一方法:

struct MyList: View {
    var body: some View {
            Text("MyList")
            .navigationBarTitle(Text(verbatim: "MyList"), displayMode: .inline)
            .navigationBarItems(leading: Text("<"))
    }
}

但是,我丢失了默认的返回图像并得到了一个丑陋的

【问题讨论】:

    标签: swiftui ios13 ios-navigationview


    【解决方案1】:

    您需要设置返回按钮将弹出到的视图的标题:

    struct ContentView: View {    
        var body: some View {
            NavigationView {
                VStack {
                    NavigationLink(destination: DetailView()) {
                        Text("push view")
                    }
                }.navigationBarTitle("", displayMode: .inline)
            }
        }
    }
    
    struct DetailView: View {    
        var body: some View {
            Text("Detail View")
        }
    }
    

    或者,根据呈现状态,有条件地设置或取消设置源视图的标题,您可以使用下面的代码。

    请注意 isActive 参数有一个错误,但很可能很快就会解决。这里参考SwiftUI: NavigationDestinationLink deprecated提到的bug

    struct ContentView: View {
        @State private var active: Bool = false
    
        var body: some View {
            NavigationView {
                VStack {
                    NavigationLink(destination: DetailView(), isActive: $active) {
                        Text("push view")
                    }
                }.navigationBarTitle(!active ? "View Title" : "", displayMode: .inline)
            }
        }
    }
    
    struct DetailView: View {
        var body: some View {
            Text("Detail View")
        }
    }
    

    【讨论】:

    • 虽然这解决了眼前的问题,但它创造了一个新问题。现在“源”视图控制器在导航栏中没有标题。
    • 添加了另一种选择。
    • 感谢@kontiki,除了您提到的错误之外,这一切正常。
    • 在 2021 年不起作用。..."displayMode: .inline" 不起作用,在单独的行上添加 navigationBarTitleDisplayMode(.inline) 不起作用。