回答編集履歴

1 より簡潔に済むように修正

f-miyu

f-miyu score 1222

2019/04/03 14:59  投稿

コードでステータスバーのスタイルを変更すればいいので、[カスタムレンダラー](https://docs.microsoft.com/ja-jp/xamarin/xamarin-forms/app-fundamentals/custom-renderer/)を使います。
以下のように`ContentPage`と`NavigationPage`をカスタマイズします。
以下のように`NavigationPage`をカスタマイズします。
**.NET Standardプロジェクト**
```C#  
namespace StatusBar  
{  
   public class CustomContentPage : ContentPage  
   {  
   }  
}  
```  
```C#
namespace StatusBar
{
   public class CustomNavigationPage : NavigationPage
   {
       public CustomNavigationPage()
       {
       }
       public CustomNavigationPage(Page root) : base(root)
       {
       }
   }
}
```
**iOSプロジェクト**
 
```C#  
[assembly: ExportRenderer(typeof(CustomContentPage), typeof(CustomContentPageRenderer))]  
namespace StatusBar.iOS  
{  
   public class CustomContentPageRenderer : PageRenderer  
   {  
       public override UIStatusBarStyle PreferredStatusBarStyle()  
       {  
           return UIStatusBarStyle.LightContent;  
       }  
   }  
}  
```  
 
```C#
[assembly: ExportRenderer(typeof(CustomNavigationPage), typeof(CustomNavigationRenderer))]
namespace StatusBar.iOS
{
   public class CustomNavigationRenderer : NavigationRenderer
   {
       public override UIViewController ChildViewControllerForStatusBarStyle()
       public override UIStatusBarStyle PreferredStatusBarStyle()
       {
           return VisibleViewController.ChildViewControllers.First();
           return UIStatusBarStyle.LightContent;
       }
   }
}
```
以下のように使います。
```C#
MainPage = new CustomNavigationPage(new Webview())
{
   BarBackgroundColor = Color.Crimson,
   BarTextColor = Color.White,
};
```  
 
```xml  
<local:CustomContentPage xmlns="http://xamarin.com/schemas/2014/forms"  
            xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"  
            xmlns:local="clr-namespace:StatusBar"  
            x:Class="StatusBar.Webview">  
   <WebView Source="https://www.youtube.com" />  
</local:CustomContentPage>  
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る