我想知道将图像放入导航栏的最佳方法。
我最初的想法是为UINavigationController创建一个cocoa触摸类并以这种方式设置它,但我似乎可以使用下面的代码使它工作:
class NavBarImage: UINavigationController {
override func awakeFromNib() {
}
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
self.setupView()
}
func setupView()
{
let navController = navigationController!
let image = #imageLiteral(resourceName: "BarTabsNavLogoWhite")
let imageView = UIImageView(image: image)
let bannerWidth = navController.navigationBar.frame.size.width
let bannerHeight = navController.navigationBar.frame.size.height
let bannerX = bannerWidth / 2 - image.size.width / 2
let bannerY = bannerHeight / 2 - image.size.height / 2
imageView.frame = CGRect(x: bannerX, y: bannerY, width: bannerWidth,
height: bannerHeight)
imageView.contentMode = .scaleAspectFit
navigationItem.titleView = imageView
}
}
我在navController = navigationController上一直得到“在展开可选值时意外发现nil!”。
然而,这种方法也对我有用。我为UINavigationBar创建了一个可可触摸类,并使用下面的代码:
import UIKit
class NavBarImg: UINavigationBar {
override init(frame: CGRect) {
super.init(frame: frame)
initialise()
}
required init(coder aDecoder: NSCoder){
super.init(coder: aDecoder)!
initialise()
}
func initialise(){
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 225, height: 40))
imageView.contentMode = .scaleAspectFit
let image = UIImage(named:"BarTabsNavLogoWhite")
imageView.image = image
imageView.frame.origin = CGPoint(x: self.superview?.center.x, y: self.superview?.center.y)
addSubview(imageView)
}
}
唯一的问题是,在不同的iPhone上,我无法弄清楚如何使图像始终以使用CGPoint的任何设备为中心。
然后,我找到并实现的最后一个方法由以下代码完成:
@IBDesignable class test: UINavigationBar { @IBInspectable var imageTitle: UIImage? = nil {
didSet {
guard let imageTitle = imageTitle else {
topItem?.titleView = nil
return
}
let imageView = UIImageView(image: imageTitle)
imageView.frame = CGRect(x: 0, y: 0, width: 40, height: 30)
imageView.contentMode = .scaleAspectFit
topItem?.titleView = imageView
}
}
}
我非常喜欢这种方法,因为使用IBDesignable功能,您可以在故事板中看到它。然而,当我浏览第一个视图控制器后,我的viewcontrollers设置了tableview的方式,当我运行模拟器时,导航栏图像在所有其他视图控制器中消失。
寻找建议,看看哪种方法是最好的方法,以及如何解决我遇到的问题。或者,如果任何人有不同的方法,他们发现它有效,id喜欢看它是如何工作的!
答案 0 :(得分:0)
您只需添加图片或自定义按钮,如下所示:
let button = UIButton(type: .custom)
button.setImage(UIImage(named: "icon_right"), for: .normal)
button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
button.frame = CGRect(x: 0, y: 0, width: 53, height: 31)
button.imageEdgeInsets = UIEdgeInsetsMake(-1, 32, 1, -32)//move image to the right
let label = UILabel(frame: CGRect(x: 3, y: 5, width: 20, height: 20))
label.font = UIFont(name: "Arial-BoldMT", size: 16)
label.text = "title"
label.textAlignment = .center
label.textColor = .black
label.backgroundColor = .clear
button.addSubview(label)
let barButton = UIBarButtonItem(customView: button)
self.navigationItem.rightBarButtonItem = barButton