在SwiftUI中可以使用edgesIgnoringSafeArea或ignoresSafeArea忽略系统的安全区域,它们的作用是让视图可以延伸到整块屏幕。
什么是Safe Area(安全区域)?
在iPhone屏幕存在一个Safe Area(安全区域):
1、顶部的状态栏(时间、电量)
2、底部的Home指示条
3、iPhone刘海(notch)或灵动岛(Dynamic Island)
SwiftUI默认会避免这些区域,这就意味着视图不会贴边显示。
例如,设置一张壁纸图片:
VStack {
Image("bg0")
.resizable()
.scaledToFill()
}

可以看到,即使使用scaledToFill铺满视图,仍然无法铺满整个应用视图。这是就需要使用edgesIgnoringSafeArea和ignoresSafeArea铺满整个应用视图。
1、edgesIgnoringSafeArea
edgesIgnoringSafeArea(_:) 可以指定方向:
.all:忽略上下左右全部安全区;
.botton:忽略底部安全区;
.top:忽略顶部安全区;
.horizontal:忽略左右安全区;
.leading:忽略左侧安全区;
.trailing:忽略右侧安全区;
.vertical:忽略上下安全区,与.all相同。
例如:
.edgesIgnoringSafeArea([.top])
表示忽略顶部安全区。

2、ignoresSafeArea
从iOS 14起,推荐使用新语法:
.ignoresSafeArea()
完全等价于旧的:
.edgesIgnoringSafeArea(.all)
ignoresSafeArea可以接收两个参数:
.ignoresSafeArea(_ regions: SafeAreaRegions = .all, edges: Edge.Set = .all)
1)SafeAreaRegions枚举:
.container:设备和用户界面内容器定义的安全区域;
.keyboard:视图中键盘相匹配的安全区域;
.all:所有安全区域
2)edges枚举:.top、.leading、.bottom、.trailing、.all、.horizontal、.veritical。
常见用法:
1、忽略全部安全区域:
.ignoresSafeArea()
等价于 .ignoresSafeArea(.all, edges: .all)
2、只忽略顶部安全区域:
.ignoresSafeArea(.container, edges: .top)
3、只忽略底部安全区域:
.ignoresSafeArea(.container, edges: .bottom)
总结
系统默认保留一个安全显示区域,需要通过edgesIgnoringSafeArea或者.ignoresSafeArea()修饰符,将视图内容延伸到全屏。