UINavigationBar(ナビゲーションバー)
【ナビゲーションバーをコードで作る】
Storyboardを使わずに、コードでナビゲーションバー を作成します。
ナビゲーションバー の高さを変更するため、カスタムクラスを作っています。
ナビゲーションバー の高さを変更するため、カスタムクラスを作っています。
【NavigationBar.swift】
import UIKit
class NavigationBar: UINavigationBar {
let barHeight: CGFloat = 60
override func sizeThatFits(_ size: CGSize) -> CGSize {
return CGSize(width: UIScreen.main.bounds.width, height: barHeight)
}
override func layoutSubviews() {
super.layoutSubviews()
if #available(iOS 11.0, *) {
for subview in subviews {
let stringFromClass = NSStringFromClass(subview.classForCoder)
if stringFromClass.contains("UIBarBackground") {
subview.frame = CGRect(x: 0, y: 0, width: frame.width, height: barHeight)
subview.sizeToFit()
}
if stringFromClass.contains("UINavigationBarContentView") {
let centerY = (barHeight - subview.frame.height) / 2.0
subview.frame = CGRect(x: 0, y: centerY, width: frame.width, height: subview.frame.height)
subview.sizeToFit()
}
}
}
}
}
class NavigationBar: UINavigationBar {
let barHeight: CGFloat = 60
override func sizeThatFits(_ size: CGSize) -> CGSize {
return CGSize(width: UIScreen.main.bounds.width, height: barHeight)
}
override func layoutSubviews() {
super.layoutSubviews()
if #available(iOS 11.0, *) {
for subview in subviews {
let stringFromClass = NSStringFromClass(subview.classForCoder)
if stringFromClass.contains("UIBarBackground") {
subview.frame = CGRect(x: 0, y: 0, width: frame.width, height: barHeight)
subview.sizeToFit()
}
if stringFromClass.contains("UINavigationBarContentView") {
let centerY = (barHeight - subview.frame.height) / 2.0
subview.frame = CGRect(x: 0, y: centerY, width: frame.width, height: subview.frame.height)
subview.sizeToFit()
}
}
}
}
}
【ViewController.swift】
import UIKit
class ViewController: UIViewController {
let navBar = NavigationBar()
let navBarheight: CGFloat = 60
//ナビゲーションバー のタイトル用
var navlabel = UILabel()
override func viewDidLoad() {
super.viewDidLoad()
//ナビゲーションバーの配置・サイズ
navBar.frame = CGRect(x: 0, y: 0, width: screenW, height: navBarheight)
//ナビゲーションバーアイテムを作成
let navItem = UINavigationItem()
//ナビゲーションバータイトル設定
navItem.titleView = navlabel
navlabel.text = "タイトル"
//ナビゲーションバータイトル色・フォントサイズ
navlabel.textColor = UIColor.white
navlabel.font = UIFont(name: "HiraMinProN-W3", size: 26)
//ナビゲーションバー左側への設置
let LeftnavButton = UIBarButtonItem()
let LeftnavButtonImg:UIImage = UIImage(named: "イメージファイル名1")!
LeftnavButton.image = LeftnavButtonImg
//ナビゲーションバー左側をタップした際
LeftnavButton.action = #selector(ViewController.leftnavButtontap)
//ナビゲーションバー右側に設置
let RightnavButton = UIBarButtonItem()
let RightnavButtonImg:UIImage = UIImage(named: "イメージファイル名2")!
RightnavButton.image = RightnavButtonImg
//ナビゲーションバー右側をタップした際
RightnavButton.action = #selector(ViewController.rightnavButtontap)
//ナビゲーションバーアイテムにボタンを設置する(左側)
navItem.leftBarButtonItem = LeftnavButton
//ナビゲーションバーアイテムにボタンを設置する(右側)
navItem.rightBarButtonItem = RightnavButton
//ナビゲーションバーアイテムの色を変える
navBar.tintColor = UIColor.white
//ナビゲーションバーにアイテムを格納する。
navBar.pushItem(navItem, animated:true)
//ナビゲーションバーの色を変える
navBar.barTintColor = UIColor(red: CGFloat(redColor), green: CGFloat(greenColor), blue: CGFloat(blueColor), alpha: 1.0)
// ナビゲーションバーの透明化
// 半透明の指定(デフォルト値)
self.navBar.isTranslucent = true
// 空の背景画像設定
self.navBar.setBackgroundImage(UIImage(), for: .default)
// ナビゲーションバーの影画像(境界線の画像)を空に設定
self.navBar.shadowImage = UIImage()
//ナビゲーションバーを追加する。
self.view.addSubview(navBar)
}
//ナビゲーションバー左側をタップした際のアクション
@objc func leftnavButtontap(_ sender: UIBarButtonItem) {
print("左側を押したよ")
}
//ナビゲーションバー右側をタップした際のアクション
@objc func rightnavButtontap(_ sender: UIBarButtonItem) {
print("右側を押したよ")
}
}
class ViewController: UIViewController {
let navBar = NavigationBar()
let navBarheight: CGFloat = 60
//ナビゲーションバー のタイトル用
var navlabel = UILabel()
override func viewDidLoad() {
super.viewDidLoad()
//ナビゲーションバーの配置・サイズ
navBar.frame = CGRect(x: 0, y: 0, width: screenW, height: navBarheight)
//ナビゲーションバーアイテムを作成
let navItem = UINavigationItem()
//ナビゲーションバータイトル設定
navItem.titleView = navlabel
navlabel.text = "タイトル"
//ナビゲーションバータイトル色・フォントサイズ
navlabel.textColor = UIColor.white
navlabel.font = UIFont(name: "HiraMinProN-W3", size: 26)
//ナビゲーションバー左側への設置
let LeftnavButton = UIBarButtonItem()
let LeftnavButtonImg:UIImage = UIImage(named: "イメージファイル名1")!
LeftnavButton.image = LeftnavButtonImg
//ナビゲーションバー左側をタップした際
LeftnavButton.action = #selector(ViewController.leftnavButtontap)
//ナビゲーションバー右側に設置
let RightnavButton = UIBarButtonItem()
let RightnavButtonImg:UIImage = UIImage(named: "イメージファイル名2")!
RightnavButton.image = RightnavButtonImg
//ナビゲーションバー右側をタップした際
RightnavButton.action = #selector(ViewController.rightnavButtontap)
//ナビゲーションバーアイテムにボタンを設置する(左側)
navItem.leftBarButtonItem = LeftnavButton
//ナビゲーションバーアイテムにボタンを設置する(右側)
navItem.rightBarButtonItem = RightnavButton
//ナビゲーションバーアイテムの色を変える
navBar.tintColor = UIColor.white
//ナビゲーションバーにアイテムを格納する。
navBar.pushItem(navItem, animated:true)
//ナビゲーションバーの色を変える
navBar.barTintColor = UIColor(red: CGFloat(redColor), green: CGFloat(greenColor), blue: CGFloat(blueColor), alpha: 1.0)
// ナビゲーションバーの透明化
// 半透明の指定(デフォルト値)
self.navBar.isTranslucent = true
// 空の背景画像設定
self.navBar.setBackgroundImage(UIImage(), for: .default)
// ナビゲーションバーの影画像(境界線の画像)を空に設定
self.navBar.shadowImage = UIImage()
//ナビゲーションバーを追加する。
self.view.addSubview(navBar)
}
//ナビゲーションバー左側をタップした際のアクション
@objc func leftnavButtontap(_ sender: UIBarButtonItem) {
print("左側を押したよ")
}
//ナビゲーションバー右側をタップした際のアクション
@objc func rightnavButtontap(_ sender: UIBarButtonItem) {
print("右側を押したよ")
}
}