我想添加一个定制的导航按钮,看起来有点像这样:

desired navigation back button

现在,我已经为此编写了一个自定义的BackButton视图.当将该视图作为主要导航栏项应用时,请执行以下操作:

.navigationBarItems(leading: BackButton())

...导航视图如下所示:

current navigation back button

我用过这样的修饰语:

.navigationBarItem(title: Text(""), titleDisplayMode: .automatic, hidesBackButton: true)

没有任何运气.

问题

我怎么能...

  1. 在导航栏中设置用作自定义后退按钮的视图?或者:
  2. 以编程方式将视图弹出回其父视图

推荐答案

TL;博士

使用此选项转换视图:

NavigationLink(destination: SampleDetails()) {}

将以下内容添加到视图本身:

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

然后,在按钮操作或其他操作中,关闭视图:

presentationMode.wrappedValue.dismiss()

完整代码

从家长处,使用NavigationLink导航

 NavigationLink(destination: SampleDetails()) {}

详细信息查看隐藏navigationBarBackButton并将自定义后退按钮设置为前导navigationBarItem

struct SampleDetails: View {
    @Environment(\.presentationMode) var presentationMode: Binding<PresentationMode>

    var btnBack : some View { Button(action: {
        self.presentationMode.wrappedValue.dismiss()
        }) {
            HStack {
            Image("ic_back") // set image here
                .aspectRatio(contentMode: .fit)
                .foregroundColor(.white)
                Text("Go back")
            }
        }
    }
    
    var body: some View {
            List {
                Text("sample code")
        }
        .navigationBarBackButtonHidden(true)
        .navigationBarItems(leading: btnBack)
    }
}

Swift相关问答推荐

如何在Swift 中创建移动的uil标签?

如何避免使用DispatchSemaphores时线程爆炸?

一种函数,用于判断变量的类型是否为在SWIFT中作为参数传递的类型

如何写一个;风格;视图修饰符,它会影响特定类型的所有嵌套视图?

我如何在 swift 中的 viewdidload 之前进行委托?

使用View()和List()无法显示影子

Firebase removeObserver 在 Swift 5 中不起作用

动画偏移正在 destruct 按钮 SwiftUI

UIButton 配置不更新按钮标题

如何在 SwiftUI 中将图像传递到 2 个视图

SwiftUI - Select 器没有 Select 值

Swift中的分段错误

找不到接受提供的参数的/的重载

Swift 动画 WithDuration 语法是什么?

Swift 3.0 的 stringByReplacingOccurencesOfString()

如何在 SwiftUI 中的一个视图上显示两个alert ?

如何将多个枚举值作为函数参数传递

Objective-C 方法与可选需求方法 Swift 冲突

转换为 swift 3 后,视图控制器中出现奇怪的通用函数

swift中相同的数据类型多变量声明