gpt4 book ai didi

ios - 在导航栏中添加图像

转载 作者:行者123 更新时间:2023-11-30 11:51:56 25 4
gpt4 key购买 nike

我想知道将图像放入导航栏中的最佳方法。

我最初的想法是为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com