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

Sor*_*ica 5 xcode uikit ios swift swiftui

我使用 aNavigationLink从“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")
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

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

use*_*632 8

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

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")
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,这种方法是有问题的。返回时,缩短的标题会短暂出现,然后切换到完整标题。 (3认同)

Man*_*dan 6

您可以通过隐藏本机 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)
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:-

在此输入图像描述

  • 通过这样做,您将失去交互式滑动手势。不酷 (3认同)

Dmy*_*ets 6

我已经通过提供文件Back中键的翻译来本地化后退按钮Localizable.strings

不过我正在使用 SwiftUI。

  • 您是否只是在“Localized.strings”文件中添加了诸如“Back”=“Назад”;之类的内容?我只是这样做,但它对我不起作用,尽管所有其他字符串都按预期本地化。 (2认同)

Osm*_*man 5

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

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

例如 :

ToolbarItem(placement: .principal) {
    HStack{
        Text("View1")
    }.font(.subheadline)
}
Run Code Online (Sandbox Code Playgroud)

并在 View1 中设置您的标题:

.navigationTitle("Back")
Run Code Online (Sandbox Code Playgroud)

在你看来什么也不做2。它会自动将您的 view1 标题添加到您的 view2 默认后退按钮文本中