保留图标,从"后退"按钮中删除文本

lmi*_*asf 74 xcode ios swift

我想从后退按钮中删除文本,但我想保留图标.我试过了

let backButton = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.Plain, target: navigationController, action: nil)
navigationItem.leftBarButtonItem = backButton
Run Code Online (Sandbox Code Playgroud)

但是,这会完全删除文本和图标.

d9r*_*rad 119

我知道这已经有了答案,但您也可以在代码中执行此操作(如果您正在使用nib)

navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
Run Code Online (Sandbox Code Playgroud)

在第一个视图控制器中添加上面的内容.

请注意,您需要为每个正在推送的视图控制器执行此操作.因此,如果您有3个视图控制器,并且想要从所有视图控制器中删除背面文本,则必须在视图控制器1和2中添加该行.

  • 此解决方案不再起作用. (23认同)
  • 这是迄今为止我见过的最好的解决方案,没有给我带来任何麻烦 (4认同)
  • `.Plain`改为`.plain`.没有资本p. (4认同)
  • @GastónAntonioMontes,它确实可以在 iOS13 上运行,但有点违反直觉:空标题 backBarButtonItem 应该在 _pushing_ 视图控制器上声明,而不是 _pushed_ 视图控制器上 (2认同)

m8l*_*abs 85

@ rmd2的方法几乎是正确的,但您应该选择后退按钮指向的控制器的导航栏并输入" "后退按钮字段.

在此输入图像描述

  • 最糟糕的方式,如果视图控制器没有导航栏,我将不得不添加以删除文本 (3认同)

Ste*_*fan 33

后退按钮的文本取决于主视图的标题.

诀窍是如果主视图消失则清除标题,如果再次显示则再次设置它:

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(true)

    // needed to clear the text in the back navigation:
    self.navigationItem.title = " "
}

override func viewWillAppear(_ animated: Bool) {

    super.viewWillAppear(animated)
    self.navigationItem.title = "My Title"
}
Run Code Online (Sandbox Code Playgroud)


Muh*_*air 32

如果你想从一个推视图控制器删除后退按钮的标题,比方说<Settings<在subSettingsViewController,那么你已经设置backBarButtonItem冠军SettingsViewController的viewWillDisappear()方法.

Objective-C的:

- (void)viewWillDisappear:(BOOL)animated
    [super viewWillDisappear:animated];
    self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"" style:self.navigationItem.backBarButtonItem.style target:nil action:nil];
}
Run Code Online (Sandbox Code Playgroud)

迅速:

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
Run Code Online (Sandbox Code Playgroud)


iOS*_*fee 25

经过大量搜索,我找到了最好的解决方案,这将影响用Swift 4.2编写的所有viewControllers

extension UIViewController {
            open override func awakeFromNib() {
                navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
        }  
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这仅在您的 ViewController 包含在 Storyboard 或 Nib 中时才有效... (6认同)
  • 这曾经对我有用,但不再适用(它仍然适用于 iOS 12 模拟器,只是不适用于最新的 iOS 13)... (4认同)
  • 最好的答案!谢谢! (2认同)

Pra*_*noi 24

如果你想要后面的箭头,那么下面的代码放入AppDelegate文件到didFinishLaunchingWithOptions方法.

对于斯威夫特

let BarButtonItemAppearance = UIBarButtonItem.appearance()
BarButtonItemAppearance.setTitleTextAttributes([.foregroundColor: UIColor.clear], for: .normal)
Run Code Online (Sandbox Code Playgroud)

  • 这是非常好的快速解决方案,但是......如果除了后面的其他酒吧按钮项目,它可能会很棘手:) (3认同)
  • 我喜欢这个,因为你可以在一个文件中标准化你的应用程序的风格,并从应用程序委托中调用一次 (2认同)
  • 一种观察,如果仅实现“ .normal”属性,则单击时将看到文本。为“ .selected”,“。highlighted”和“ .disabled”添加同一行。以确保您看不到闪烁的文本。 (2认同)

Raf*_*san 23

在我的情况下,对于自定义图标和标题,这就成功了(Swift 4)

    let imgBack = UIImage(named: "ic_back")

    navigationController?.navigationBar.backIndicatorImage = imgBack
    navigationController?.navigationBar.backIndicatorTransitionMaskImage = imgBack

    navigationItem.leftItemsSupplementBackButton = true
    navigationController?.navigationBar.topItem?.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: self, action: nil)
Run Code Online (Sandbox Code Playgroud)


小智 19

这对我有用

override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.navigationBar.topItem?.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
}
Run Code Online (Sandbox Code Playgroud)


小智 14

我通过在前一个ViewController的StoryBoard标题上添加""来解决了这个问题.只是一个空间,不是空的; D

在此输入图像描述

  • 我已经取消了该标题,但标题仍然出现在后退按钮标题中 (2认同)

Lal*_*mar 11

终于找到了完美的解

只需添加一个透明图像,然后在AppDelegate中添加以下代码即可.

UIBarButtonItem.appearance().setBackButtonBackgroundImage(#imageLiteral(resourceName: "transparent"), for: .normal, barMetrics: .default)
Run Code Online (Sandbox Code Playgroud)

  • 最佳答案。比透明文本颜色效果更好。 (3认同)

Ama*_*Kar 10

在快速4

self.navigationController?.navigationBar.topItem?.title = ""
Run Code Online (Sandbox Code Playgroud)

  • 但是,您将在父 vc 中失去您的头衔 (3认同)

Bil*_*fas 9

对于斯威夫特4+ 把这些线成AppDelegatedidFinishLaunchingWithOptions

let BarButtonItemAppearance = UIBarButtonItem.appearance()

BarButtonItemAppearance.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.clear], for: .normal)      
BarButtonItemAppearance.setBackButtonTitlePositionAdjustment(UIOffsetMake(-200, 0), for:UIBarMetrics.default)
Run Code Online (Sandbox Code Playgroud)


Bra*_*ley 6

如果您有一个 ViewControllerA 并且想要导航到 ViewControllerB,则在 ViewControllerA 中,您应该使用新的 UIBarButtonItem 将当前导航项设置为带有空格的字符串,然后再推送到另一个视图控制器:

将标题设置为带空格的字符串,不能设置nil或""(空字符串),因为默认值为nil

let backItem = UIBarButtonItem()
backItem.title = " "
navigationItem.backBarButtonItem = backItem
let controllerB = ViewControllerB()
navigationController?.pushViewController(controllerB, animated: true)
Run Code Online (Sandbox Code Playgroud)


Pol*_*ill 6

将此代码放在每个 VC 中,这会推动另一个

navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .plain, target: nil, action: nil)
Run Code Online (Sandbox Code Playgroud)


kev*_*val 5

您可以使用 的委托方法从后退按钮中删除文本UINavigationController

class CustomNavigationController: UINavigationController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
    }

}

extension CustomNavigationController: UINavigationControllerDelegate {
    
    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
        viewController.navigationItem.backBarButtonItem = UIBarButtonItem(title: String(), style: .plain, target: nil, action: nil)
    }
    
}
Run Code Online (Sandbox Code Playgroud)