Ios Xcode 7.3.1:将背景图像设置为UINavigationBar并显示后退按钮

Ios Xcode 7.3.1:将背景图像设置为UINavigationBar并显示后退按钮,ios,swift,xcode,uinavigationcontroller,uinavigationbar,Ios,Swift,Xcode,Uinavigationcontroller,Uinavigationbar,我想将应用程序的徽标作为背景图像设置为UINavigationBar,当用户进入应用程序时,它应该显示徽标以及顶部的后退按钮。 下面是我使用的代码: func setNavigationBar() { let navigationBarHeight: CGFloat = self.navigationController!.navigationBar.frame.height let screenSize: CGRect = UIScreen.mainScree

我想将应用程序的徽标作为背景图像设置为
UINavigationBar
,当用户进入应用程序时,它应该显示徽标以及顶部的后退按钮。

下面是我使用的代码:

 func setNavigationBar() {
        let navigationBarHeight: CGFloat = self.navigationController!.navigationBar.frame.height
        let screenSize: CGRect = UIScreen.mainScreen().bounds

        let objCustomView = CustomView(frame: CGRect(x: 0, y: 0, width: screenSize.width, height: navigationBarHeight))

        let objWindow = UIApplication.sharedApplication().keyWindow
        objWindow?.addSubview(objCustomView)

        self.navigationItem.setHidesBackButton(false, animated:true);
        self.navigationItem.backBarButtonItem = UIBarButtonItem(title:"", style:.Plain, target:nil, action:nil)                
    }
问题是后退按钮位于图像后面。

如何解决此问题?

通过@NDoc引用帖子后,我在左边得到了额外的空间。为什么会这样? 此外,后退按钮应为白色,没有后退文本,即只有<箭头

以下是customView的代码:

class CustomView: UIView {      
    var imgLogo = UIImageView(frame:CGRectZero)

    override init(frame: CGRect) {
        super.init(frame: frame)

        let screenSize: CGRect = UIScreen.mainScreen().bounds        
        imgLogo.frame = CGRectMake(0, 0, screenSize.width, 44.0)

        setup()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        setup()
    }

    func setup() {
        imgLogo.image = UIImage(named:"BoM_Logo")
        self.addSubview(imgLogo)
    }
}

您可以在
leftBarButtonItem
中显示您的徽标,并将
leftItemsSupportElementBackButton
设置为
true
以显示
backButton

let logoView = UIImageView(frame: CGRect(x: 0, y: 0, width: 60, height: 30))
logoView.image = UIImage(named: "Logo")
let item = UIBarButtonItem(customView: logoView)
self.navigationItem.leftBarButtonItem = item
let logoView = UIImageView(frame: CGRect(x: 0, y: 0, width: 60, height: 30))
logoView.image = UIImage(named: "Logo")
let logoItem = UIBarButtonItem(customView: logoView)
let btnBack = UIButton(frame: CGRect(x: 0, y: 0, width: 25, height: 25))
btnBack.setImage(UIImage(named: "Back_Arrow"), forState: .Normal)
btnBack.addTarget(self, action: #selector(self.buttonAction(_:)), forControlEvents: .TouchUpInside)
let backItem = UIBarButtonItem(customView: btnBack)     
self.navigationItem.leftBarButtonItems = [backItem, logoItem]
要显示带有徽标图像的后退按钮,请将
leftitemsupplementbackbutton
设置为
true

self.navigationItem.leftItemsSupplementBackButton = true
编辑:

如果需要自定义箭头,则需要使用
leftBarButtonItems
并传递
BarButtonItem
的数组,而不需要像这样将
leftItemsSupportBackButton
设置为
true

let logoView = UIImageView(frame: CGRect(x: 0, y: 0, width: 60, height: 30))
logoView.image = UIImage(named: "Logo")
let item = UIBarButtonItem(customView: logoView)
self.navigationItem.leftBarButtonItem = item
let logoView = UIImageView(frame: CGRect(x: 0, y: 0, width: 60, height: 30))
logoView.image = UIImage(named: "Logo")
let logoItem = UIBarButtonItem(customView: logoView)
let btnBack = UIButton(frame: CGRect(x: 0, y: 0, width: 25, height: 25))
btnBack.setImage(UIImage(named: "Back_Arrow"), forState: .Normal)
btnBack.addTarget(self, action: #selector(self.buttonAction(_:)), forControlEvents: .TouchUpInside)
let backItem = UIBarButtonItem(customView: btnBack)     
self.navigationItem.leftBarButtonItems = [backItem, logoItem]

注意:别忘了在viewController中添加
按钮操作
操作方法。

您可以在
leftBarButtonItem
中显示您的徽标,并将
leftItemsSupplementBackButton
设置为
true
,以显示
backButton
,如下所示

let logoView = UIImageView(frame: CGRect(x: 0, y: 0, width: 60, height: 30))
logoView.image = UIImage(named: "Logo")
let item = UIBarButtonItem(customView: logoView)
self.navigationItem.leftBarButtonItem = item
let logoView = UIImageView(frame: CGRect(x: 0, y: 0, width: 60, height: 30))
logoView.image = UIImage(named: "Logo")
let logoItem = UIBarButtonItem(customView: logoView)
let btnBack = UIButton(frame: CGRect(x: 0, y: 0, width: 25, height: 25))
btnBack.setImage(UIImage(named: "Back_Arrow"), forState: .Normal)
btnBack.addTarget(self, action: #selector(self.buttonAction(_:)), forControlEvents: .TouchUpInside)
let backItem = UIBarButtonItem(customView: btnBack)     
self.navigationItem.leftBarButtonItems = [backItem, logoItem]
要显示带有徽标图像的后退按钮,请将
leftitemsupplementbackbutton
设置为
true

self.navigationItem.leftItemsSupplementBackButton = true
编辑:

如果需要自定义箭头,则需要使用
leftBarButtonItems
并传递
BarButtonItem
的数组,而不需要像这样将
leftItemsSupportBackButton
设置为
true

let logoView = UIImageView(frame: CGRect(x: 0, y: 0, width: 60, height: 30))
logoView.image = UIImage(named: "Logo")
let item = UIBarButtonItem(customView: logoView)
self.navigationItem.leftBarButtonItem = item
let logoView = UIImageView(frame: CGRect(x: 0, y: 0, width: 60, height: 30))
logoView.image = UIImage(named: "Logo")
let logoItem = UIBarButtonItem(customView: logoView)
let btnBack = UIButton(frame: CGRect(x: 0, y: 0, width: 25, height: 25))
btnBack.setImage(UIImage(named: "Back_Arrow"), forState: .Normal)
btnBack.addTarget(self, action: #selector(self.buttonAction(_:)), forControlEvents: .TouchUpInside)
let backItem = UIBarButtonItem(customView: btnBack)     
self.navigationItem.leftBarButtonItems = [backItem, logoItem]

注意:不要忘记在viewController中添加
按钮操作
操作方法。

在appDelegate中尝试此操作

let image = UIImage.init(named:"upper-bar.png")
UINavigationBar.appearance().setBackgroundImage(image,forBarMetrics:UIBarMetrics.Default)
对于“后退”按钮,请在viewController的viewDidLoad()中尝试此操作

let image1 = UIImage(named: "go10.png") as UIImage?
let btnLeft = UIButton(type: .Custom)
btnLeft.frame = CGRectMake(0, 0, 25, 25)
btnLeft.setImage(image1,forState:UIControlState.Normal)
btnLeft.addTarget(self, action:(#selector(NameofyourViewController.backBtn(_:))),forControlEvents:UIControlEvents.TouchUpInside)

let leftBarButton = UIBarButtonItem(customView: btnLeft)
self.navigationItem.leftBarButtonItem = leftBarButton
@IBAction func backBtn(sender: UIButton)
{
    self.navigationController?.popViewControllerAnimated(true)
}

在你的appDelegate中试试这个

let image = UIImage.init(named:"upper-bar.png")
UINavigationBar.appearance().setBackgroundImage(image,forBarMetrics:UIBarMetrics.Default)
对于“后退”按钮,请在viewController的viewDidLoad()中尝试此操作

let image1 = UIImage(named: "go10.png") as UIImage?
let btnLeft = UIButton(type: .Custom)
btnLeft.frame = CGRectMake(0, 0, 25, 25)
btnLeft.setImage(image1,forState:UIControlState.Normal)
btnLeft.addTarget(self, action:(#selector(NameofyourViewController.backBtn(_:))),forControlEvents:UIControlEvents.TouchUpInside)

let leftBarButton = UIBarButtonItem(customView: btnLeft)
self.navigationItem.leftBarButtonItem = leftBarButton
@IBAction func backBtn(sender: UIButton)
{
    self.navigationController?.popViewControllerAnimated(true)
}

请检查问题。我使用此代码还有一个问题,请检查问题。使用此代码还有一个问题