MAUI实现沉浸式全屏需分平台处理:Android可隐藏状态栏和导航栏,iOS仅能隐藏状态栏;需配合布局Padding、SafeArea适配及平台服务封装,注意手势、键盘与横竖屏兼容性。

MAUI 实现全屏显示(即“沉浸式模式”)主要通过平台特定代码控制状态栏和导航栏的可见性,Android 和 iOS 的实现方式不同,Windows/macOS 不支持传统意义上的沉浸式全屏。核心思路是:隐藏系统 UI(状态栏、导航栏),让应用内容铺满整个屏幕,同时避免内容被系统栏遮挡。
Android:隐藏状态栏 + 导航栏(真正沉浸)
在 MAUI 中需通过 Android 平台专属代码 设置 Window 的 DecorView 系统 UI 标志:
- 在
Platforms/Android/MainActivity.cs的OnCreate方法中(确保在 base.OnCreate(savedInstanceState) 之后)添加:
if (Build.VERSION.SdkInt >= BuildVersionCodes.R)
{
Window.InsetsController?.Hide(WindowInsets.Type.StatusBars() | WindowInsets.Type.NavigationBars());
Window.InsetsController?.SystemBarsBehavior = Android.Graphics.Insets.SystemBarsBehavior.ShowTransientBarsBySwipe;
}
else
{
var decorView = Window.DecorView;
decorView.SystemUiVisibility = (StatusBarVisibility)(SystemUiFlags.Fullscreen
| SystemUiFlags.HideNavigation
| SystemUiFlags.ImmersiveSticky
| SystemUiFlags.LayoutFullscreen
| SystemUiFlags.LayoutHideNavigation);
}
- 为防止内容被隐藏的系统栏“顶上去”,需在页面根布局(如
ContentPage)设置:Padding="0",并确保容器(如Grid或ScrollView)不自动预留系统栏空间; - 若需动态切换沉浸模式(如点击按钮进入/退出),可封装上述逻辑为方法,并在需要时调用。
iOS:隐藏状态栏(有限沉浸)
iOS 不允许隐藏底部安全区域(Home Indicator),仅能隐藏顶部状态栏:
- 在
Platforms/iOS/AppDelegate.cs中重写GetStatusBarHidden:
public override bool GetStatusBarHidden(UIApplication application) => true;
- 同时在
Info.plist中添加键UIViewControllerBasedStatusBarAppearance,值设为YES(确保状态栏控制权交由 ViewController); - iOS 页面内容默认会避开安全区域,如需延伸到底部,请对关键视图(如背景
Frame)设置:IgnoreSafeArea="True"(MAUI 8+ 支持)或使用SafeAreaEffect手动处理。
跨平台统一入口(推荐封装)
为便于管理,可在共享项目中定义接口,再由各平台实现:
- 新建
IPlatformFullScreenService接口,含EnterImmersiveMode()和ExitImmersiveMode(); - Android 实现调用前述 Window 控制逻辑;iOS 实现调用
UIApplication.SharedApplication.SetStatusBarHidden; - 在
MauiProgram.cs中注册服务:builder.Services.AddSingleton(按平台条件注册);() - 页面中通过依赖注入调用,实现逻辑与平台解耦。
注意事项与常见问题
-
手势冲突:Android 启用
ImmersiveSticky后,从边缘上滑可临时呼出导航栏,但不会自动恢复隐藏——这是预期行为; - 键盘弹出:沉浸模式下软键盘仍会顶起内容,需监听键盘事件并手动调整布局(如 ScrollView 滚动到焦点控件);
-
横竖屏切换:部分设备旋转后状态栏可能意外显示,建议在
OnConfigurationChanged中重新应用沉浸设置; -
MAUI 版本差异:.NET 8+ 对
IgnoreSafeArea和平台服务注册更友好,旧版本需手动处理更多生命周期回调。
基本上就这些。沉浸式不是“一键开关”,而是结合平台特性、布局适配和生命周期控制的组合操作。做好状态同步(比如退出页面时恢复状态栏)和边界测试(折叠屏、刘海屏、iPad),体验才稳。










