人生の恥は書き捨て

プログラムとかいろいろ

navigationbarとtoolbarをスクロール時やタップ時に表示/非表示する

スクロール時やタップ時にnavigationbarとtoolbarの表示/非表示を切り替えたいという話です。
twitterアプリの画像の表示の部分とかで使われていますね。

基本的なやり方

viewDidLoadかviewWillAppearあたりで

self.navigationController?.hidesBarsOnSwipe = true
self.navigationController?.hidesBarsOnTap = true

でokかと思います。

ハマったとこ

  1. toolbarはnavigationControllerの持っているtoolbarを使います。
  2. toolbarのitemが0の場合は正しく動きません。
  3. toolbarのitemはtoolbar.setItemsではなくnavigationController.visibleViewController.setToolbarItemsを使わなければいけない

2は仕様みたいです。
3はここに書かれていて助かった。

UIToolbar: setItems and UINavigationController setToolbarItems - codeitive.com

navigationControllerの持っているtoolbarのitemはviewControllerから取得されるようなことが書いてある。

じゃあvisibleViewControllerにしなくても今のviewControllerにsetToolbarItemsすればオッケーじゃないか。
やってみたらできた。