【问题标题】:Buttons replacing navigation bar items替换导航栏项目的按钮
【发布时间】:2020-08-24 00:18:17
【问题描述】:

我想在状态栏下获得两个按钮:

首先,我隐藏了导航栏:

navigationController?.setNavigationBarHidden(true, animated: false)

并在 NavigationBar 的位置制作了 2 个按钮。它在模拟器上工作,但在真实设备(iPhone 6)上,当按钮位于导航栏区域时,触摸事件不起作用

我决定制作具有透明背景和 2 个按钮的自定义 NavigationBar(一个而不是返回 btn,第二个作为 rightView)

我尝试了 Apple 文档中的说明:

    let backButtonBackgroundImage = UIImage(named: "testDpng.png")
    let barAppearance =
        UINavigationBar.appearance(whenContainedInInstancesOf: [SubViewController.self])
    barAppearance.backIndicatorImage = backButtonBackgroundImage
    barAppearance.backIndicatorTransitionMaskImage = backButtonBackgroundImage

    // Nudge the back UIBarButtonItem image down a bit.
    let barButtonAppearance =
        UIBarButtonItem.appearance(whenContainedInInstancesOf: [SubViewController.self])
    barButtonAppearance.setBackButtonTitlePositionAdjustment(UIOffset(horizontal: 0, vertical: -5), for: .default)

但是什么也没发生。 backBtn 看起来像往常一样。

我该如何解决?这是正确的方法 - 更换导航项目?或者我应该从一开始就隐藏导航栏?

【问题讨论】:

  • 如果你隐藏了你的导航栏?那为什么不用 UIView 来添加按钮呢?

标签: ios swift uinavigationbar uinavigationitem uinavigationbarappearance


【解决方案1】:

navigationBar不要隐藏,要透明,并在navigationBar左右两边加上UIBarButtonItem

以下代码适用于 Swift 5:

 override func viewDidLoad() {
        super.viewDidLoad()
        //Make NavigationBar Transparent
                self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
                self.navigationController?.navigationBar.shadowImage = UIImage()

        //Add Left Button Which Has Image
                let leftButton = UIBarButtonItem(image: UIImage(named: "shape"), style: .plain, target: self, action: #selector(crossBtnTapped))
                self.navigationItem.leftBarButtonItem  = leftButton

        //Add Right Button Which Has Title
                let rightButton = UIBarButtonItem(title: "Restore", style: .done, target: self, action: #selector(restoreTapped))
                rightButton.tintColor = .darkGray
                self.navigationItem.rightBarButtonItem = rightButton
}

按钮点击的操作方法

@objc func restoreTapped(){
     print("Restore Tapped")
}

@objc func crossBtnTapped(){
     print("Cross Tapped")
}

输出:

【讨论】:

  • 它有帮助,但我的匕首不在屏幕左侧。似乎看不见的后退按钮是一个障碍
猜你喜欢
  • 1970-01-01
  • 2015-12-04
  • 2012-12-30
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
  • 2016-06-26
  • 2020-07-20
  • 2019-10-13
相关资源
最近更新 更多