繁体   English   中英

SwiftUI 中 NavigationView 中后退按钮的默认文本

[英]Default text for back button in NavigationView in SwiftUI

我使用NavigationLink从“View1”导航到“View2”,在第二个视图上,后退按钮获取上一个视图的标题

在此处输入图片说明

但是,如果前一个视图的标题很长,则后退按钮将获取文本“后退”

在此处输入图片说明

我怎么能改变那个“返回”文本?

我想让我的应用程序以多种语言提供,但是当手机的语言改变时,“返回”似乎没有改变

struct ContentView: View {

    var body: some View {

        return NavigationView {
            VStack {
                Text("View1")
                NavigationLink(destination: Text("View2").navigationBarTitle("Title View2", displayMode: .inline)) {
                    Text("NavigationLink")
                }
            }.navigationBarTitle("Title View1")
        }

    }
}

PS:我想保留这个功能,我只想更改用于后退按钮的语言

这是一个解决方法......

struct ContentView: View {
        @State private var isActive: Bool = false

        var body: some View {
            NavigationView {
                VStack {
                    NavigationLink(destination: DetailView(), isActive: $isActive) {
                        Text("Title View2")
                    }
                }.navigationBarTitle(! isActive ? "Title View2" : "Your desired back Title", displayMode: .inline)
            }
        }
    }

    struct DetailView: View {
        var body: some View {
            Text("View2")
        }
    }

您可以通过隐藏本机 navigationBackButton 在导航链接中创建自定义后退按钮。 在自定义后退按钮中,您可以添加已翻译的自定义后退按钮标题。

struct ContentView: View {

    var body: some View {

        return NavigationView {
            VStack {
                Text("View1")
                NavigationLink("NavigationLink", destination: NextView())
            }.navigationBarTitle("Title View1")
        }
    }
}
struct NextView: View {
    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>

    var backButton : some View { Button(action: {
        self.presentationMode.wrappedValue.dismiss()
        }) {
            HStack {
            Image("backImage") // BackButton Image
                .aspectRatio(contentMode: .fit)
                .foregroundColor(.white)
                Text("Go Back") //translated Back button title 
            }
        }
    }
    var body: some View {
            VStack {
            Text("View2")
        }
        .navigationBarTitle("Title View2",displayMode: .inline)
        .navigationBarBackButtonHidden(true)
        .navigationBarItems(leading: backButton)
    }
}

输出:-

在此处输入图片说明

通过为Localizable.strings文件中的Back键提供翻译,我设法本地化了后退按钮。

不过我正在使用 SwiftUI。

创建您自己的按钮,然后使用 .navigationBarItems() 分配它。 我发现以下格式最接近默认的后退按钮。

    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>

    var backButton : some View {
        Button(action: {
            self.presentationMode.wrappedValue.dismiss()
        }) {
            HStack(spacing: 0) {
                Image(systemName: "chevron.left")
                    .font(.title2)
                Text("Cancel")
            }
        }
    }

确保您使用.navigationBarBackButtonHidden(true)隐藏默认按钮并将其替换为您自己的!

        List(series, id:\.self, selection: $selection) { series in
            Text(series.SeriesLabel)
        }
        .navigationBarBackButtonHidden(true)
        .navigationBarItems(leading: backButton)

将本地化添加到您的项目中。 如果语言是使用用户设备设置(或模拟器)设置的,在您向项目添加本地化后,它将起作用。 项目支持的语言必须与设备上选择的语言相匹配。

我找到了一个也可以很好地工作的解决方案。

View1 使用 .principal 设置一个工具栏项并添加您的文本或您想要的内容。

例如 :

            ToolbarItem(placement: .principal) {
                HStack{
                    Text("View1")
                }.font(.subheadline)
            }

并在 View1 中设置您的标题:

.navigationTitle("Back")

并且在您的视图中什么都不做。 它会自动将您的 view1 标题添加到您的 view2 默认后退按钮文本中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM