MAUI怎么适配刘海屏和安全区域 MAUI SafeArea使用

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

MAUI 适配刘海屏和安全区域,核心是让内容避开设备物理遮挡区(如顶部刘海、底部 Home Indicator、圆角),关键不是“加 padding”,而是正确启用并控制 SafeAreaEdges 行为。

全局启用 SafeArea(推荐 .NET 10+)

不用每个页面手动写,直接在

MauiProgram.cs
中统一配置:

ConfigureLifecycleEvents
里监听页面创建,自动设置
SafeAreaEdges = SafeAreaEdges.All
或更简洁:在 App 的主
ContentPage
模板(如
MainPage.xaml
)中直接设属性:
<contentpage safeareaedges="All"></contentpage>
注意:
SafeAreaEdges="All"
表示内容完全避开所有安全区域边界(上下左右),适合大多数常规页面

按需控制安全区域范围

不同控件对安全区需求不同,可单独设置:

SafeAreaEdges="None"
:允许内容延伸到边缘(比如全屏视频、背景图)
SafeAreaEdges="Container"
:避开状态栏/导航栏/指示器,但允许覆盖软键盘
SafeAreaEdges="SoftInput"
:只避开键盘,其他区域(含刘海)不避让 —— 适合输入框弹出时保持布局紧凑
支持在
Grid
ScrollView
Border
等容器上直接设置,不只限于 Page

运行时读取安全边距(动态适配)

某些场景需获取具体像素值(如自定义顶部占位、计算滚动偏移):

iOS 平台专用 API:
On<ios>().SafeAreaInsets()</ios>
返回
Microsoft.Maui.Thickness
结果包含
Top
Bottom
Left
Right
四个值,单位为逻辑像素
该值可能随屏幕旋转、状态栏显示/隐藏而变化,建议监听
SizeChanged
或重写
OnSizeAllocated
更新布局

兼容旧版 UseSafeArea(仅限遗留项目)

如果你还在用

Page.UseSafeArea = true
(.NET MAUI 早期版本):

它等效于
SafeAreaEdges="All"
,但已标记为过时
新项目请勿再用,避免升级后行为异常 如果必须保留,注意它只影响 Page,无法作用于子容器

基本上就这些。SafeArea 不是黑盒,关键是理解

SafeAreaEdges
是一种“策略开关”,而不是固定样式;合理组合使用
All
/
Container
/
SoftInput
就能覆盖 95% 的刘海屏与折叠屏场景。

相关推荐