我想知道将图像放入导航栏中的最佳方法。
我最初的想法是为 UINavigationController 创建一个 cocoa touch 类并以这种方式设置它,但我似乎可以使用下面的代码让它工作:
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
}
}
我在 let navController = navigationController 上不断收到“在展开可选值时意外发现 nil”!
不过,这个方法对我来说也很有效。我为 UINavigationBar 创建了一个 cocoa touch 类并使用了下面的代码:
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 函数,您可以在 Storyboard中看到它。然而,我使用表格 View 设置 View Controller 的方式,在我经过第一个 View Controller 后,当我运行模拟器时,导航栏图像会在所有其他 View Controller 中消失。
寻求建议,看看哪种方法是最好的方法以及如何解决我遇到的问题。或者,如果有人有他们发现有效的不同方法,我很想看看它是如何工作的!
最佳答案
您可以简单地添加图像或自定义栏按钮,如下所示:
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
关于ios - 在导航栏中添加图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48256533/