【问题标题】:SwiftUI Show navigation bar title on the back button but not in the previous ViewSwiftUI 在后退按钮上显示导航栏标题,但在前一个视图中不显示
【发布时间】:2021-05-17 10:35:51
【问题描述】:

我有两种观点,一种导向另一种。我希望第二个视图使用第一个视图的标题作为后退按钮,然后应该是:“

问题:我无法隐藏导航栏,因为它还会隐藏其中的 自定义按钮。设置.navigationTitle("") 会在第一个视图中隐藏标题,但也会在第二个视图的后退按钮中隐藏它。

我现在拥有的:

我想要什么:

代码:

struct ContentView: View {
    @State var isLinkActive = false
    
    var body: some View {
        NavigationView {
            VStack {
            NavigationLink("go to the second view", destination: SecondView(), isActive: $isLinkActive).navigationTitle("View1")
                .navigationBarItems(leading: Button(action: {
                    ()
                }, label: {
                    Text("custom button")
                }))
            }
        }.navigationViewStyle(StackNavigationViewStyle())
        
    }
    
    private func btnPressed() {
        isLinkActive = true
    }
}

struct SecondView: View {
    var body: some View {
        Color.blue
    }
}

【问题讨论】:

  • 这是否回答了您的问题stackoverflow.com/a/60996978/12299030
  • @Asperi 但这会隐藏导航栏,所以我的自定义按钮(即 navigationBarItem)将不可见?我需要显示这个自定义按钮

标签: ios swift swiftui


【解决方案1】:

您还需要为目标视图创建自定义后退按钮,并且您不应该为navigationLink 设置导航标题,这就是您无法隐藏的原因“View1” 正确。

检查下面的代码。

import SwiftUI

struct Test: View {
    @State var isLinkActive = false
    
    
    var body: some View {
        NavigationView {
            VStack {
                NavigationLink("go to the second view", destination: SecondView()
                                .navigationBarBackButtonHidden(true)
                                .navigationBarItems(leading: Button(action: {
                                    isLinkActive = false
                                }, label: {
                                    HStack{
                                        Image(systemName: "backward.frame.fill")
                                        Text("View1")
                                    }
                                })) ,
                               isActive: $isLinkActive)
                
            }.navigationBarItems(leading: Button(action: {
                ()
            }, label: {
                Text("custom button")
            }))
        }.navigationViewStyle(StackNavigationViewStyle())
        
        
    }
    
    private func btnPressed() {
        isLinkActive = true
    }
}

struct SecondView: View {

    var body: some View {
        Color.blue
    }
}

您可以尝试将navigationBar 代码设为可重用组件,因为您可能需要在多个地方执行此操作。

输出-:

【讨论】:

  • 我喜欢这种方法,但不幸的是它不会产生系统图标,因此它与我的应用程序的其余部分不一致。我可能不得不为文本搜索正确的资产和正确的字体,这已经使它更像是一种解决方法,而不是实际的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-19
  • 1970-01-01
  • 2021-09-08
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
  • 2017-11-06
相关资源
最近更新 更多