Microsoft 系のあれこれ

港区の SIer で よくわからんことをしている人です。Xamarin 中心でした。(過去形)

Xamarin.Forms で iOS のステータスバーとナビゲーションバーの色を動的に変えたい(仮)

前回の記事ではナビゲーションバーに色付きアイコンを置けるようにしました。
shunsukekawai.hatenablog.com


ナビゲーションバー系繋がりで、ステータスバーとナビゲーションバー自体の色をページによって動的に変えたかったのでやってみました。
タイトルに(仮)が付いてるのは結構無理やりというか、もうちょいスマートなやり方ないのかなー。と思ってるからです。誰か教えてください。

完成形

f:id:ShunsukeKawai:20170907203753g:plain:w300

作成方法

PCL 側にこんなカスタムコントロールを作成します。

ナビゲーションバーの色(NavigationBarColor)とステータスバーのスタイルをデフォルトか(IsUseDefaultBarStyle)の BindableProperty を追加した ContentPage を継承したクラスです。

iOS の プロジェクトに CustomRenderer を作成します。
  • OnElementChanged で上で作成したプロパティを取得してメンバー変数に格納
  • ViewWillAppear でステータスバーの種類を設定、ナビゲーションバーがある場合は色を設定
  • 右側のアイコンボタンの種類を設定(前回の記事分のアイコンにモードを設定するヤツ)


iOS プロジェクトの info.plist に View controller-based status bar appearance というプロパティを追加し、NO を設定します。

これをしないとステータスバーのスタイルが変更できません。
f:id:ShunsukeKawai:20170907214852p:plain

各ページをカスタムコントロールにして、プロパティを設定

以下のように遷移するようになってます。今までのもひっくるめて Github にアップしておきます。
MainPage→SecondPage
      ↓
     ModalPage
github.com