今天写的代码是通过懒加载的模式自定义视觉Navbar,代码一定存在不妥之处,并且处于一个简单的封装,后续我的思路是将navBar放在父类Controlle中,我们在写controller时可以直接加载这个NavBar进行加载,个人喜欢自定义navBar将系统的隐藏掉,因为系统的牵扯到全局个人不是很喜欢,直接上代码吧
效果图
navbar.png简单调用代码
let navBar1 = NavBar.init(frame: CGRect(x: 0, y: 0, width: screen_width, height: navBar_height))
self.view.addSubview(navBar1)
navBar1.set_navType(navtype: Navtype.back)
navBar1.set_title(title: "世界你好")
navBar1.set_rightTitle(right_title: "保存")
let navBar2 = NavBar.init(frame: CGRect(x: 0, y: 80, width: screen_width, height: navBar_height))
self.view.addSubview(navBar2)
navBar2.set_navType(navtype: Navtype.none)
navBar2.set_title(title: "世界你好")
navBar2.set_rightTitle(right_title: "保存")
navBar2.set_leftTitle(left_title: "时间")
let navBar3 = NavBar.init(frame: CGRect(x: 0, y: 160, width: screen_width, height: navBar_height))
self.view.addSubview(navBar3)
navBar3.set_navType(navtype: Navtype.none)
navBar3.set_title(title: "世界你好")
navBar3.set_leftImage(left_image: "scan_code")
navBar3.set_rightImage(right_image: "search_home")
let navBar4 = NavBar.init(frame: CGRect(x: 0, y: 240, width: screen_width, height: navBar_height))
self.view.addSubview(navBar4)
navBar4.set_navType(navtype: Navtype.none)
navBar4.set_title(title: "世界你好")
navBar4.set_leftImage(left_image: "scan_code")
navBar4.set_rightImage(right_image: "search_home")
navBar4.set_leftFrame(leftFrame: CGRect(x: 18, y: 0, width: 44, height: 44))
navBar4.set_rightFrame(rightFrame: CGRect(x: screen_width-62, y: 0, width: 44, height: 44))
实现方式
import UIKit
enum Navtype:NSInteger {
case none = 0
case back = 1
}
class NavBar: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
self.backgroundColor = main_color
self.addSubview(self.contentView)
}
func set_navType(navtype:Navtype) -> Void {
print(navtype)
switch navtype {
case Navtype.none:
do {
self.contentView.addSubview(titleLabel)
}
case Navtype.back:
do {
self.leftItem.frame = CGRect(x: 0, y: 0, width: 44.0, height: 44.0)
self.leftItem.setImage(UIImage(named: "back"), for: .normal)
self.leftItem.setImage(UIImage(named: "back"), for: .selected)
self.contentView.addSubview(self.leftItem)
self.contentView.addSubview(self.titleLabel)
}
}
}
func set_title(title:String) -> Void {
self.titleLabel.text = title
}
func set_leftTitle(left_title:String) -> Void {
self.leftItem.frame = CGRect(x: 20, y: 0, width: 60.0, height: 44.0)
self.leftItem.setTitle(left_title, for: .normal)
self.leftItem.setTitleColor(navText_color, for: .normal)
self.leftItem.contentHorizontalAlignment = .left
self.contentView.addSubview(self.leftItem)
}
func set_rightTitle(right_title:String) -> Void {
self.rightItem.frame = CGRect(x: screen_width-80, y: 0, width: 60.0, height: 44.0)
self.rightItem.setTitle(right_title, for: .normal)
self.rightItem.setTitleColor(navText_color, for: .normal)
self.rightItem.contentHorizontalAlignment = .right
self.contentView.addSubview(self.rightItem)
}
func set_leftImage(left_image:String) -> Void {
self.leftItem.frame = CGRect(x: 15, y: 0, width: 44.0, height: 44.0)
self.leftItem.setImage(UIImage(named:left_image ), for: .normal)
self.leftItem.contentHorizontalAlignment = .left
self.contentView.addSubview(self.leftItem)
}
func set_rightImage(right_image:String) -> Void {
self.rightItem.frame = CGRect(x: screen_width-59, y: 0, width: 44.0, height: 44.0)
self.rightItem.contentHorizontalAlignment = .right
self.rightItem.setImage(UIImage(named:right_image ), for: .normal)
self.contentView.addSubview(self.rightItem)
}
func set_leftFrame(leftFrame:CGRect) -> Void {
self.leftItem.frame = leftFrame
}
func set_rightFrame(rightFrame:CGRect) -> Void {
self.rightItem.frame = rightFrame
}
lazy var contentView:UIView = {
let view = UIView.init(frame: CGRect(x: 0.0, y: statusBar_height, width: screen_width, height: nav_content_height))
view.backgroundColor = main_color
return view;
}()
lazy var titleLabel:UILabel = {
let label = UILabel.init(frame: CGRect(x:screen_width/2-80, y: 11, width: 160, height: 21))
label.backgroundColor = clear_color
label.font = UIFont.systemFont(ofSize: 17)
label.textColor = navText_color
label.textAlignment = .center
return label;
}()
lazy var leftItem:UIButton = {
let button = UIButton.init(type:.custom)
button.titleLabel!.font = UIFont.systemFont(ofSize: 16)
button.backgroundColor = clear_color
button.addTarget(self, action: #selector(leftItemClick(button:)), for: .touchUpInside)
return button;
}()
lazy var rightItem:UIButton = {
let button = UIButton.init(type:.custom)
button.backgroundColor = clear_color
button.titleLabel!.font = UIFont.systemFont(ofSize: 16)
button.addTarget(self, action: #selector(rightItemClick(button:)), for: .touchUpInside)
return button;
}()
@objc func leftItemClick(button:UIButton){
print("点击左边")
}
@objc func rightItemClick(button:UIButton){
print("点击右边")
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
/*
// Only override draw() if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
override func draw(_ rect: CGRect) {
// Drawing code
}
*/
}
网友评论