iOSでスクロール時にNavigationBarを隠すライブラリ
アニメアプリのアニマネiOS版を先日アップデートした際にタブ型メニューを導入しました。
コンテンツの量を増やせるようなったのはよいのですが、画面が狭くなってしまうという問題あります。 この問題の解決のために、スクロールするとNavigationBarを非表示にするというよくあるUIの実装を検討しています。
できれば既存ライブラリを上手く使って組み込みたいので、実現できそうなライブラリを探してみました。
今回の要件
- スクロール量と連動してUINavigationBarを非表示にする。
- 可能であればUITabarも高さを調整したい。
- タブ型メニューやバナー広告も連動してスクロールができるようにする。
- UINavigationBarが非表示の状態で画面遷移後、エッジスワイプで戻れるようにしたい。
- ステータスバーをタップした時にはUINavigationBarが表示されるようにする。
- 継続的にメンテナンスされていること。
TLYShyNavBar
このてのライブラリでは有名だと思われるTLYShyNavBar。 機能が豊富でアニメーションも綺麗です。
UIScrollViewDelegateを使って実装されていて、カスタマイズも効きそう。
現在でも積極的に開発が進められているようです。 Objective-Cで書かれています。
GTScrollNavigationBar
こちらも有名な方だと思います。 機能としてはシンプルなObjective-Cライブラリ。
こちらもUIScrollViewDelegateを使って実装されています。
SQTShyNavigationBar
前述したライブラリよりも後発のObjective-Cライブラリです。 堅牢でトリッキーなケースでもスムースに動作することを目標として作らているとのこと。
UIScrollViewDelegateでもGestureRecognizerでも両方で動くようで、組み込みしやすそうです。
JDFPeekaboo
こちらも後発のObjective-Cライブラリ。 Tabbarも併せて隠すことができます。
UIScrollViewDelegateで実装されているようです。
NJKScrollFullScreen
他のライブラリと違ってスクロール時のイベントに特化したライブラリ。 スクロールを元にUIをゴリゴリ変化させる場合にはこちらのライブラリがよさそうです。 Made in JapanのObjective-Cライブラリ。
AMScrollingNavbar
Swift製のライブラリ。 機能としてはUINavigationBarを非表示のみですが、 組み込みが簡単そうです。
軽くソースをみた感じではスクロール量ではなく、 GestureRecognizerを使ってスワイプをトリガーにして実装しているようです。
Delegateも用意されているので、スクロールをフックとして他の処理を差し込む事も可能です。
HidingNavigationBar
こちらもSwift製のライブラリ。 UINavigationBarだけでなく、ToolbarやTabbarにも対応しています。
AMScrollingNavbarと同じくGestureRecognizerを使って実装しているようです。
まとめ
比較的新しいライブラリではGestureRecognizerを使って実装されているものが多いようでした。 個人的にはSwift化を進めたいところなので、Swift製のライブラリから試す予定です。
使用感などはまた別記事で書くかもです。