Xamarin.FormsでiOSのダークモードをOFFにする方法
iOS13以降では、UIのモードが、ダークとライトがある。当然新たにアプリを作成する場合もこの2つのモードに対応したUIを作成する必要がある。(今後この2つモードの対応が必須になるとも言われている)
しかし、アプリによってはこのモードの切り替えがよろしくない場合もある。また、今はダークモードに即座に対応できない場合もある。そのため、強制的にダークモードでもライトモードと同じ表示にしたい時がある。
今回はXamarin.FormsでのDarkModeの場合にLightModeの見た目にする方法。
OverrideUserInterfaceStyleの設定
iOSにはOverrideUserInterfaceStyleというプロパティが存在するので、これに値を入れてやることで、NavigationBarとかTabbar、ContentPageの背景のカラーを変更できる。
そしてお馴染みのCustomRendererで設定する。
NavigationRenderer
[assembly: ExportRenderer(typeof(NavigationPage), typeof(CustomNaviPageRenderer))]
namespace App.iOS
{
public class CustomNaviPageRenderer : NavigationRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
if (UIDevice.CurrentDevice.CheckSystemVersion(13, 0))
OverrideUserInterfaceStyle = UIUserInterfaceStyle.Light;
}
}
}
PageRenderer
[assembly: ExportRenderer(typeof(ContentPage), typeof(CustomPageRenderer))]
namespace App.iOS
{
public class CustomPageRenderer : PageRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
if (UIDevice.CurrentDevice.CheckSystemVersion(13, 0))
OverrideUserInterfaceStyle = UIUserInterfaceStyle.Light;
}
}
}
TabbedRenderer
[assembly: ExportRenderer(typeof(TabbedPage), typeof(CustomTabbedPageRenderer))]
namespace App.iOS
{
public class CustomTabbedPageRenderer : TabbedRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
if (UIDevice.CurrentDevice.CheckSystemVersion(13, 0))
OverrideUserInterfaceStyle = UIUserInterfaceStyle.Light;
}
}
}
それぞれiOS13.0以上かどうかチェックしているのは、12以前だとOverrideUserInterfaceStyleプロパティがなくクラッシュしてしまうためである。
ディスカッション
コメント一覧
まだ、コメントがありません