MAUI怎么实现全屏显示 MAUI沉浸式模式教程

来源:这里教程网 时间:2026-02-21 17:34:56 作者:

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<iplatformfullscreenservice androidfullscreenservice>()</iplatformfullscreenservice>
(按平台条件注册);
页面中通过依赖注入调用,实现逻辑与平台解耦。

注意事项与常见问题

手势冲突:Android 启用
ImmersiveSticky
后,从边缘上滑可临时呼出导航栏,但不会自动恢复隐藏——这是预期行为;
键盘弹出:沉浸模式下软键盘仍会顶起内容,需监听键盘事件并手动调整布局(如 ScrollView 滚动到焦点控件); 横竖屏切换:部分设备旋转后状态栏可能意外显示,建议在
OnConfigurationChanged
中重新应用沉浸设置;
MAUI 版本差异:.NET 8+ 对
IgnoreSafeArea
和平台服务注册更友好,旧版本需手动处理更多生命周期回调。

基本上就这些。沉浸式不是“一键开关”,而是结合平台特性、布局适配和生命周期控制的组合操作。做好状态同步(比如退出页面时恢复状态栏)和边界测试(折叠屏、刘海屏、iPad),体验才稳。

相关推荐