全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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

MAUI 实现全屏显示(即“沉浸式模式”)主要通过平台特定代码控制状态栏和导航栏的可见性,Android 和 iOS 的实现方式不同,Windows/macOS 不支持传统意义上的沉浸式全屏。核心思路是:隐藏系统 UI(状态栏、导航栏),让应用内容铺满整个屏幕,同时避免内容被系统栏遮挡。

Android:隐藏状态栏 + 导航栏(真正沉浸)

在 MAUI 中需通过 Android 平台专属代码 设置 Window 的 DecorView 系统 UI 标志:

  • Platforms/Android/MainActivity.csOnCreate 方法中(确保在 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",并确保容器(如 GridScrollView)不自动预留系统栏空间;
  • 若需动态切换沉浸模式(如点击按钮进入/退出),可封装上述逻辑为方法,并在需要时调用。

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),体验才稳。


# android  # windows  # app  # ipad  # usb  # mac  # ai  # ios  # macos  # win  # 常见问题  # 键盘事件  # 封装  # 接口  # 事件  # padding  # ui  # 状态栏  # 全屏  # 顶起  # 仅能  # 这是  # 设为  # 并在  # 可在  # 弹出  # 重写 


相关文章: 如何注册花生壳免费域名并搭建个人网站?  php条件判断怎么写_ifelse和switchcase的使用区别【对比】  微课制作网站有哪些,微课网怎么进?  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  开心动漫网站制作软件下载,十分开心动画为何停播?  制作门户网站的参考文献在哪,小说网站怎么建立?  学校为何禁止电信移动建设网站?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  如何快速搭建虚拟主机网站?新手必看指南  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  浅析上传头像示例及其注意事项  linux top下的 minerd 木马清除方法  行程制作网站有哪些,第三方机票电子行程单怎么开?  常州企业建站如何选择最佳模板?  公司网站设计制作厂家,怎么创建自己的一个网站?  建站之星在线客服如何快速接入解答?  如何选择最佳自助建站系统?快速指南解析优劣  青岛网站建设如何选择本地服务器?  贸易公司网站制作流程,出口贸易网站设计怎么做?  建站之星伪静态规则如何设置?  如何获取开源自助建站系统免费下载链接?  如何快速配置高效服务器建站软件?  c# await 一个已经完成的Task会发生什么  如何在阿里云高效完成企业建站全流程?  如何在建站宝盒中设置产品搜索功能?  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  广州顶尖建站服务:企业官网建设与SEO优化一体化方案  制作农业网站的软件,比较好的农业网站推荐一下?  如何快速生成高效建站系统源代码?  如何快速生成凡客建站的专业级图册?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  如何生成腾讯云建站专用兑换码?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  教学网站制作软件,学习*后期制作的网站有哪些?  子杰智能建站系统|零代码开发与AI生成SEO优化指南  如何通过商城免费建站系统源码自定义网站主题?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  如何在Golang中使用replace替换模块_指定本地或远程路径  MySQL查询结果复制到新表的方法(更新、插入)  网站制作报价单模板图片,小松挖机官方网站报价?  打鱼网站制作软件,波克捕鱼官方号怎么注册?  建站之星后台搭建步骤解析:模板选择与产品管理实操指南  建设网站制作价格,怎样建立自己的公司网站?  如何使用Golang安装API文档生成工具_快速生成接口文档  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  阿里云网站制作公司,阿里云快速搭建网站好用吗? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。