替换导航栏项目的按钮

问题描述 投票:0回答:1

我想让状态栏下有两个按钮。enter image description here

首先,我隐藏了导航条

navigationController?.setNavigationBarHidden(true, animated: false)

并在导航条的位置上做了两个按钮。这在模拟器上是可行的,但在实际设备上(iPhone 6),当按钮在导航条区域时,触摸事件没有工作。

我决定制作透明背景的自定义导航条和2个按钮(一个是后方的btn,另一个是右方的View)。

我尝试了苹果文档的说明。

    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看起来和往常一样。

我怎么才能解决这个问题?正确的方法是--替换导航条?或者我应该隐藏导航栏,就像我从一开始尝试的那样?

ios swift uinavigationbar uinavigationitem uinavigationbarappearance
1个回答
1
投票

不要隐藏导航条,让它透明化,并添加以下功能 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")
}

产量 :

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.