【iOS】NavigationBar의 중간에 버튼을 배치하는 방법
고민한 결과 "NavigationItem의 titleView에 추가하고 싶은 버튼을 UIButton으로 만들어 넣는다"라는 방법으로 해결할 수 있었습니다.
검색해도 스트라이크한 기사가 나오지 않았으므로, 이번 정리해 둡니다.
(첫 포스트이므로 손 부드럽게)
개발 환경
목적
이상은 이런 느낌의 화면을 만들고 싶다. (예: 카메라 앱 'SNOW')
그래서 이번 해설하는 방법으로 만든 것이 이런 느낌입니다.
라는 이유로 만드는 방법 해설합니다.
마지막으로 전체 샘플 코드를 두고 있으므로, 샘플 앱을 만들 때는 꼭.
NavigationBar의 중간에 버튼을 배치하는 방법
1. 중간에 배치하고 싶은 버튼을 코드로 만든다
중간에 배치하고 싶은 버튼을 적당히 코드로 만드세요.
NabivationBar에 두는 버튼은 보통은 BarButtonItem입니다만, NavigatonBar의 특성상, 「왼쪽 맞춤의 LeftButtonItems」와 「오른쪽 맞춤의 RightButtonItems」로 나누어져 있어, 홀수개의 BarButtonItem을 균등하게 배치할 수 없습니다. (잘못되면 코멘트 해주세요 (땀))
그래서 NavigationBar의 중간에 있는 titleView에 UIButton을 대입하는 것으로, 중앙 배치의 UIButton을 추가하고 있습니다.
샘플 코드는 이쪽.
ViewController.swiftimport UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 1.真ん中に配置したいボタンをコードで作る ---------
let sampleButton = UIButton(type: .system)
sampleButton.frame = CGRect(x: 0, y: 0, width: 60, height: 30)
sampleButton.backgroundColor = UIColor.blue
sampleButton.setTitle("ボタン", for: .normal)
sampleButton.setTitleColor(UIColor.white, for: .normal)
sampleButton.layer.cornerRadius = 10
sampleButton.addTarget(self, action: #selector(ViewController.tappedButton), for: .touchUpInside)
// ----------------------------------------
}
}
여기서 주의인 것이 UIButton의 Size.
NavigationBar는 Height(높이)가 44의 고정이므로, UIButton은 44 이하의 Height로 할 필요가 있습니다.
2. 만든 버튼을 navigationItem.titleView에 넣습니다.
navigationItem.titleView에 중앙에 배치하려는 UIButton을 넣으십시오.
덧붙여서, 아래의 화상과 같이 「2개 이상을 중앙 맞추기 기분에 배치하고 싶다」라고 때는,
적당히 전용의 UIView를 생성해, 그 안에 만든 버튼을 addSubView한 것을 titleView에 대입하면 갈 수 있습니다. (FlexibleSpace에서 갈 것 같은 생각도 들지만)
ViewController.swiftimport UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
/* 1.真ん中に配置したいボタンをコードで作る
let sampleButton = UIButton(type: .system)
sampleButton.frame = CGRect(x: 0, y: 0, width: 60, height: 30)
sampleButton.backgroundColor = UIColor.blue
sampleButton.setTitle("ボタン", for: .normal)
sampleButton.setTitleColor(UIColor.white, for: .normal)
sampleButton.layer.cornerRadius = 10
sampleButton.addTarget(self, action: #selector(ViewController.tappedButton), for: .touchUpInside)
*/
//2.titleViewに追加する
navigationItem.titleView = sampleButton
}
@objc func tappedButton() {
print("Button tapped.")
}
}
여기의 NavigationItem.titleView는, 화면에서 말하면 타이틀의 문자가 표시되는 장소군요.
이 녀석이 UIView를 상속하고 있기 때문에, 중앙 배치하고 싶은 UIButton을 그대로 대입해 주면 중앙 배치를 할 수 있다는 치수입니다.
3.완성
라는 이유로 완성 코드가 이쪽. 고민 한 것보다 꽤 간단한 코드입니다.
그대로 복사하면 움직인다고 생각합니다.
ViewController.swiftimport UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let sampleButton = UIButton(type: .system)
sampleButton.frame = CGRect(x: 0, y: 0, width: 60, height: 30)
sampleButton.backgroundColor = UIColor.blue
sampleButton.setTitle("ボタン", for: .normal)
sampleButton.setTitleColor(UIColor.white, for: .normal)
sampleButton.layer.cornerRadius = 10
sampleButton.addTarget(self, action: #selector(ViewController.tappedButton), for: .touchUpInside)
navigationItem.titleView = sampleButton
}
@objc func tappedButton() {
print("Button tapped.")
}
}
완성 이미지는 이런 느낌입니다.
SNOW가 어떻게 중앙 배치시키고 있는지 궁금합니다만, 일단 같은 것은 만들 수 있었네요!
「그 밖에 더 좋은 방법 있어!」라고 하는 분은 꼭 코멘트로 가르쳐 주시면 기쁩니다!
Reference
이 문제에 관하여(【iOS】NavigationBar의 중간에 버튼을 배치하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gee-gae/items/423f40075665ba7d7c63
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
1. 중간에 배치하고 싶은 버튼을 코드로 만든다
중간에 배치하고 싶은 버튼을 적당히 코드로 만드세요.
NabivationBar에 두는 버튼은 보통은 BarButtonItem입니다만, NavigatonBar의 특성상, 「왼쪽 맞춤의 LeftButtonItems」와 「오른쪽 맞춤의 RightButtonItems」로 나누어져 있어, 홀수개의 BarButtonItem을 균등하게 배치할 수 없습니다. (잘못되면 코멘트 해주세요 (땀))
그래서 NavigationBar의 중간에 있는 titleView에 UIButton을 대입하는 것으로, 중앙 배치의 UIButton을 추가하고 있습니다.
샘플 코드는 이쪽.
ViewController.swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 1.真ん中に配置したいボタンをコードで作る ---------
let sampleButton = UIButton(type: .system)
sampleButton.frame = CGRect(x: 0, y: 0, width: 60, height: 30)
sampleButton.backgroundColor = UIColor.blue
sampleButton.setTitle("ボタン", for: .normal)
sampleButton.setTitleColor(UIColor.white, for: .normal)
sampleButton.layer.cornerRadius = 10
sampleButton.addTarget(self, action: #selector(ViewController.tappedButton), for: .touchUpInside)
// ----------------------------------------
}
}
여기서 주의인 것이 UIButton의 Size.
NavigationBar는 Height(높이)가 44의 고정이므로, UIButton은 44 이하의 Height로 할 필요가 있습니다.
2. 만든 버튼을 navigationItem.titleView에 넣습니다.
navigationItem.titleView에 중앙에 배치하려는 UIButton을 넣으십시오.
덧붙여서, 아래의 화상과 같이 「2개 이상을 중앙 맞추기 기분에 배치하고 싶다」라고 때는,
적당히 전용의 UIView를 생성해, 그 안에 만든 버튼을 addSubView한 것을 titleView에 대입하면 갈 수 있습니다. (FlexibleSpace에서 갈 것 같은 생각도 들지만)
ViewController.swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
/* 1.真ん中に配置したいボタンをコードで作る
let sampleButton = UIButton(type: .system)
sampleButton.frame = CGRect(x: 0, y: 0, width: 60, height: 30)
sampleButton.backgroundColor = UIColor.blue
sampleButton.setTitle("ボタン", for: .normal)
sampleButton.setTitleColor(UIColor.white, for: .normal)
sampleButton.layer.cornerRadius = 10
sampleButton.addTarget(self, action: #selector(ViewController.tappedButton), for: .touchUpInside)
*/
//2.titleViewに追加する
navigationItem.titleView = sampleButton
}
@objc func tappedButton() {
print("Button tapped.")
}
}
여기의 NavigationItem.titleView는, 화면에서 말하면 타이틀의 문자가 표시되는 장소군요.
이 녀석이 UIView를 상속하고 있기 때문에, 중앙 배치하고 싶은 UIButton을 그대로 대입해 주면 중앙 배치를 할 수 있다는 치수입니다.
3.완성
라는 이유로 완성 코드가 이쪽. 고민 한 것보다 꽤 간단한 코드입니다.
그대로 복사하면 움직인다고 생각합니다.
ViewController.swift
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let sampleButton = UIButton(type: .system)
sampleButton.frame = CGRect(x: 0, y: 0, width: 60, height: 30)
sampleButton.backgroundColor = UIColor.blue
sampleButton.setTitle("ボタン", for: .normal)
sampleButton.setTitleColor(UIColor.white, for: .normal)
sampleButton.layer.cornerRadius = 10
sampleButton.addTarget(self, action: #selector(ViewController.tappedButton), for: .touchUpInside)
navigationItem.titleView = sampleButton
}
@objc func tappedButton() {
print("Button tapped.")
}
}
완성 이미지는 이런 느낌입니다.
SNOW가 어떻게 중앙 배치시키고 있는지 궁금합니다만, 일단 같은 것은 만들 수 있었네요!
「그 밖에 더 좋은 방법 있어!」라고 하는 분은 꼭 코멘트로 가르쳐 주시면 기쁩니다!
Reference
이 문제에 관하여(【iOS】NavigationBar의 중간에 버튼을 배치하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gee-gae/items/423f40075665ba7d7c63텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)