LoginSignup
0
1

More than 5 years have passed since last update.

[アイデア募集🙏] navigationItem.titleViewをnavigationBarと同じサイズで表示する方法 (暫定的)

Posted at

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と同じサイズで表示されます。

0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1