在SwiftUI中从导航栏中移除返回按钮文本

28

我最近开始使用SwiftUI,得出结论:与导航一起工作还不够好。我想要实现的是以下内容。我终于设法在不使应用程序崩溃的情况下摆脱了半透明背景,但现在我遇到了下一个问题。如何去除navbaritem内部的“返回”文本?

enter image description here

我通过在SceneDelegate.swift文件中设置默认外观来实现上述视图,如下所示。

let newNavAppearance = UINavigationBarAppearance()
newNavAppearance.configureWithTransparentBackground()
newNavAppearance.setBackIndicatorImage(UIImage(named: "backButton"), transitionMaskImage: UIImage(named: "backButton"))
newNavAppearance.titleTextAttributes = [
    .font: UIFont(name: GTWalsheim.bold.name, size: 18)!,
    .backgroundColor: UIColor.white

]

UINavigationBar.appearance().standardAppearance = newNavAppearance

我能够通过覆盖导航栏项来实现这一目标,但这种方法有一个缺点(SwiftUI定制NavigationView的返回按钮文本),正如此问题的创建者所说,覆盖导航栏项后,返回手势将停止工作。同时,我也想知道如何设置返回按钮的foregroundColor。它现在具有默认的蓝色,但我想用另一种颜色来覆盖它。
12个回答

0

自定义navigationBarItems和self.presentationMode.wrappedValue.dismiss()可以工作,但是不能执行返回滑动

您可以添加以下代码以使滑动返回生效

//perform gesture go back
extension UINavigationController: UIGestureRecognizerDelegate {
    override open func viewDidLoad() {
        super.viewDidLoad()
        interactivePopGestureRecognizer?.delegate = self
    }

    public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        return viewControllers.count > 1
    }
}

但问题是,有时当您划过屏幕的一半然后取消时,它会使您的应用程序崩溃。
我建议另一种方法来删除“返回”文本。 添加isActive状态以监视当前屏幕是否处于活动状态。 :)
struct ContentView: View {
    @State var isActive = false

    var body: some View {
        NavigationView() {
            NavigationLink(
                "Next",
                destination: Text("Second Page").navigationBarTitle("Second"),
                isActive: $isActive
            )
                .navigationBarTitle(!isActive ? "Title" : "", displayMode: .inline)
        }
    }
}

在iOS 15.2上,使用$isActive绑定的第二个修复方法可以禁用返回按钮文本,但会导致导航时选择随机项目,并且调试控制台显示错误“SwiftUI在推送NavigationLink时遇到问题。请报告错误。” - tdl

-2
为什么不使用自定义的返回按钮,同时隐藏默认的返回按钮?
你可以使用任何你喜欢的设计!
适用于iOS 16。 第一个视图
struct ContentView: View {
var body: some View {
    NavigationView {
        VStack(){
            Spacer()
            NavigationLink(destination: View2()) {
                Text("Navigate")
                    .font(.title)
            }
            Spacer()
        }
    }
}
}

第二个视图

struct View2: View {
@Environment(\.presentationMode) var presentationMode

var body: some View {
    NavigationView {
        ZStack{
            VStack{
                HStack(alignment:.center){
//Any Design You Like
                    Image(systemName: "chevron.left")
                           .font(.title)
                           .foregroundColor(.blue)
                           .onTapGesture {                          
self.presentationMode.wrappedValue.dismiss()
                           }
                           .padding()
                   Spacer()
                }
                Spacer()
            }
        }
    }
    .navigationBarBackButtonHidden(true)
}
}

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