Xamarin.Formsで諦めたこと(全画面コンテンツとNavigationBar)
iOSの「マップ」のように、コンテンツを大きく見せるため、画面をタップするとナビゲーションバー(Xamarin.Formsではこの表記)が引っ込むアプリがありますね?
例(iOSの「マップ」アプリ)
NavigationPage.SetHasNavigationBar()
でナビゲーションバーの有無を切り替えればXamarin.Formsでこれを再現できるのではと考えましたが、結果は残念なものとなりました...
ナビゲーションバーが切り替わる際に、画面下部に空白ができているのが分かるでしょうか?
これはNavigationPageの中のPageがナビゲーションバーの高さ分縮小されるためです。
- バー非表示 → 表示
- Pageが縮小される(下に空白ができる)
- バーのアニメーションに合わせてPageが移動する
- 移動が完了して空白が埋まる
- バー表示 → 非表示
- バーのアニメーションに合わせてPageが移動する
- 移動が完了して空白ができる
- Pageが拡大され、空白が埋まる
Pageのサイズが変わってしまっており、レイアウト調整などでは解決できないため諦めることにしました。 (頑張るならNavigationPageのカスタムRendererだろうか...)
おまけ
再現コード
public App() { var boxView = new BoxView { Color = Color.Olive, }; var page = new ContentPage { Content = boxView, Title = "Title", }; boxView.GestureRecognizers.Add( new TapGestureRecognizer((_) => NavigationPage.SetHasNavigationBar(page, !NavigationPage.GetHasNavigationBar(page)) )); MainPage = new NavigationPage(page); }