navigationItem.titleViewにどんなに大きなframeを設定しても両サイドに8ptのマージンが設定されてしまう
この件の やや暫定的 な対応方法です。
もっと良い実現方法ご存じの方いたら教えてほしいです😱
// protocolで実現してもいいと思います。
open class NavigationTitleFullWidthView: UIView {
}
open class MyNavigationBar: UINavigationBar {
open override func layoutSubviews() {
super.layoutSubviews()
items?
.flatMap { $0.titleView as? NavigationTitleFullWidthView }
.filter { $0.superview != nil }
.forEach { titleView in
titleView.frame = self.bounds
}
}
}
- UINavigationControllerにMyNavigationBarを使うようにする
- titleViewをFullWidthにしたい場合
NavigationTitleFullWidthView
を設定する (サブクラス化しても良い)
let navigationController = UINavigationController(navigationBarClass: MyNavigationBar.self, toolbarClass: nil)
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let titleView = NavigationTitleFullWidthView()
navigationItem.titleView = titleView
}
}
これでtitleViewはnavigationBarと同じサイズで表示されます。