Xcode 7.3.1 : 将背景图片设置为 UINavigationBar 并显示后退按钮
Xcode 7.3.1 : Set background image to UINavigationBar and display back button
我想将应用程序的徽标设置为 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 参考 post 之后,我在左边得到了额外的 space。为什么这样?
此外,后退按钮应该是白色的,没有后退文字,即只有<箭头。
以下是自定义视图的代码:
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
中显示您的徽标并将 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
要显示带有徽标图像的后退按钮,请将 leftItemsSupplementBackButton
设置为 true
self.navigationItem.leftItemsSupplementBackButton = true
编辑:
如果你想要自定义箭头,那么你需要使用 leftBarButtonItems
并传递 BarButtonItem
的数组,而不需要像这样将 leftItemsSupplementBackButton
设置为 true
。
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.
中添加 buttonAction
操作方法
在您的 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)
}
我想将应用程序的徽标设置为 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 参考 post 之后,我在左边得到了额外的 space。为什么这样? 此外,后退按钮应该是白色的,没有后退文字,即只有<箭头。
以下是自定义视图的代码:
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
中显示您的徽标并将 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
要显示带有徽标图像的后退按钮,请将 leftItemsSupplementBackButton
设置为 true
self.navigationItem.leftItemsSupplementBackButton = true
编辑:
如果你想要自定义箭头,那么你需要使用 leftBarButtonItems
并传递 BarButtonItem
的数组,而不需要像这样将 leftItemsSupplementBackButton
设置为 true
。
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.
中添加buttonAction
操作方法
在您的 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)
}