Xamarin.Forms.Shell:如何管理StatusBar颜色

人气:64 发布:2023-01-03 标签: android ios xamarin.forms statusbar xamarin.forms.shell

问题描述

我开发了一个小型Xamarin.Forms.Shell应用,但我找不到如何将自定义颜色应用于StatusBar前景和背景。

我的应用程序使用非常基本的配色方案:

为前台和TabBar 白色代表NavigationBarTabBar的背景

我希望StatusBar保持相同的颜色,但情况并非如此:

在iOS上,StatusBar颜色似乎由LightMode/DarkMode管理

=&>在不管理暗模式的设备上,或者当亮模式处于活动状态时,StatusBar信息显示良好

=&>但暗模式处于活动状态时情况并非如此,因为这些信息是隐藏的

在Android上,StatusBar颜色似乎由styles.xaml文件和android:statusBarColor属性管理

=>;如果我指定白色,StatusBar信息不可见,因为也有白色

而如果我指定灰色颜色,则StatusBar信息清晰可见

因此我尝试应用给定的解决方案there:

这在iOS上不起作用:我仍然有相同的行为,因为StatusBar信息不可见,暗模式处于活动状态时也是白色的 这似乎适用于Android,但这并不适用于所有Android版本(因为它适用于棉花糖版本)

如何管理iOS StatusBar前景色?Android够用吗?

推荐答案

您可以对iOS(黑白状态栏)使用以下方法

    public void SetWhiteStatusBar()
    {
        Device.BeginInvokeOnMainThread(() =>
        {
            if (UIDevice.CurrentDevice.CheckSystemVersion(13, 0))
            {
                UIView statusBar = new UIView(UIApplication.SharedApplication.KeyWindow.WindowScene.StatusBarManager.StatusBarFrame);
                statusBar.BackgroundColor = UIColor.White;
                UIApplication.SharedApplication.KeyWindow.AddSubview(statusBar);
            }
            else
            {
                UIView statusBar = UIApplication.SharedApplication.ValueForKey(new NSString("statusBar")) as UIView;
                if (statusBar.RespondsToSelector(new ObjCRuntime.Selector("setBackgroundColor:")))
                {
                    statusBar.BackgroundColor = UIColor.White;
                }
            }
            UIApplication.SharedApplication.SetStatusBarStyle(UIStatusBarStyle.DarkContent, false);
            GetCurrentViewController().SetNeedsStatusBarAppearanceUpdate();
        });
    }

检查我的问题/答案

Xamarin Forms - how to change the status bar color without a navigation page

完整的工作示例在此处https://github.com/georgemichailou/ShaXam

21