UINavigationBarのTitleLabelを弄りたい!

はじめに

UINavigationbarのtitleをスクロールビューのスクロール量で透過アニメーションさせたいと思い実装しようと思ったんですが、UINavigationbarが保持しているTitleLabelを直接触ることはできませんでした。

ドキュメントを読んで見るとTitleのLabelは公開されていないのですが、titleViewと言うものが存在しました。

/// Custom view to use in lieu of a title. May be sized horizontally. Only used when item is topmost on the stack.

要は自分で作れってことですね💡

デフォルトと同じtitleLabelの実装

デバッグバーで止めてデフォルトのNavigationBarTitleLabelを確認するとこんな感じでした。

コード

let isDarkMode = UITraitCollection.current.userInterfaceStyle == .dark
let color = isDarkMode ? UIColor.white : UIColor.black
let font = UIFont.boldSystemFont(ofSize: 17.0)
let titleAttributes: [NSAttributedString.Key: Any] = [.foregroundColor: color,
                                                      .font: font]
let titleLabel = UILabel()
titleLabel.attributedText = NSAttributedString(string: "ナビゲーションバータイトル",
                                               attributes: titleAttributes)
navigationController?.navigationBar.topItem?.titleView = titleLabel

こんん回私が実現したいことはNavigationBarのTitleのalphaをいじることだったのでスクロールの変更が飛んでくるところで以下の値をいじることでやりたいことが実現できました🎉

navigationController?.navigationBar.topItem?.titleView?.alpha