Xamarin.Forms iOS 状态栏颜色显示在屏幕底部,未设色时底部自动出现蓝色
问题根因
这个异常由两个常见配置错误导致:
- iOS安全区域适配逻辑未显式声明,页面未撑满全屏时,系统会使用应用根窗口的默认背景色填充底部安全区域,你看到的蓝色就是iOS应用根窗口的默认背景色
- 状态栏颜色赋值逻辑错误,错误将状态栏的背景色参数写入了底部安全区域的渲染属性
修复步骤
- 首先给所有需要适配iOS的ContentPage显式配置安全区域,先在XAML头部引入iOS平台配置命名空间:
xmlns:ios="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core"
之后在ContentPage节点上添加安全区域配置:ios:Page.UseSafeArea="True" - 如果不需要底部安全区域占位,可直接在页面构造函数中指定安全区域的填充范围,仅保留顶部状态栏区域即可:
using Xamarin.Forms.PlatformConfiguration; using Xamarin.Forms.PlatformConfiguration.iOSSpecific; public YourPage() { InitializeComponent(); On<iOS>().SetSafeAreaInsets(new Thickness(0, 20, 0, 0)); } - 检查AppDelegate中FinishedLaunching方法的窗口背景色配置,将其修改为和应用全局背景一致的颜色,避免未覆盖区域透出默认蓝色:
public override bool FinishedLaunching(UIApplication app, NSDictionary options) { global::Xamarin.Forms.Forms.Init(); LoadApplication(new App()); // 新增这行修改窗口默认背景色 Window.BackgroundColor = UIColor.White; // 替换为你需要的背景色 return base.FinishedLaunching(app, options); } - 排查全局状态栏颜色设置逻辑,不要通过修改Window子视图的方式设置状态栏背景色,避免错误修改底部安全区域的颜色,正确的全局状态栏样式设置代码如下:
UIApplication.SharedApplication.SetStatusBarStyle(UIStatusBarStyle.DarkContent, false);
问题现象参考

内容的提问来源于stack exchange,提问作者Priyanka
相关产品推荐
相关产品推荐

