Ios 如何使用Swift UI将忽略安全区域的地图视图与我的其他内容对齐?

Ios 如何使用Swift UI将忽略安全区域的地图视图与我的其他内容对齐?,ios,iphone,layout,swiftui,swift5,Ios,Iphone,Layout,Swiftui,Swift5,我不熟悉Swift编码,只是想玩一玩。因此,我在这里尝试了我的运气: 问题: 我可以完成教程,到目前为止它看起来还不错,但是我想在MapView和其余内容之间添加一个Divider。我遇到了布局问题。正如他们所说,MapView覆盖了整个顶部区域,但是在iphone11上,布局在MapView和下一个分隔器之间增加了一个很大的间隙 到目前为止,我所尝试的: 我一直在玩弄VStack间距和预览设置,但无法使间隙真正消失,除非我删除了edgesIgnoreSafeArea()属性 在Preview

我不熟悉Swift编码,只是想玩一玩。因此,我在这里尝试了我的运气:

问题: 我可以完成教程,到目前为止它看起来还不错,但是我想在
MapView
和其余内容之间添加一个
Divider
。我遇到了布局问题。正如他们所说,
MapView
覆盖了整个顶部区域,但是在
iphone11
上,布局在
MapView
和下一个
分隔器之间增加了一个很大的间隙

到目前为止,我所尝试的: 我一直在玩弄
VStack
间距和预览设置,但无法使间隙真正消失,除非我删除了
edgesIgnoreSafeArea()
属性

PreviewProvider
中,我可以将
布局设置为
sizehattfits
。这就是我希望它最终呈现的方式,而不仅仅是在预览中

导入快捷界面
结构ContentView:View{
var body:一些观点{
VStack(间距:0.0){
地图视图()
.帧(宽度:。无穷大,高度:300.0)
.edgesIgnoringSafeArea(.top)//这将忽略顶部间距
分隔器()
.框架(高度:2)
.背景(颜色.黑色)
ImageMaskedView()
.偏移量(y:-130.0)
.padding(.bottom,-130)
VStack(对齐:。前导){
文本(“海龟岩”)
.font(.title)
HStack(对齐:。顶部){
文本(“约书亚树国家公园”)
.font(.subheadline)
垫片()
文本(“加利福尼亚”)
.font(.subheadline)
}
}
.填充(10)
垫片()//这会将其余部分向上推
}
}
}
结构内容视图\u预览:PreviewProvider{
静态var预览:一些视图{
ContentView()
.previewDevice(“iPhone 11”)
}
}
导入快捷界面
导入地图套件
结构映射视图:UIViewRepresentable{
func makeUIView(上下文:context)->MKMapView{
MKMapView(帧:.0)
}
func updateUIView(uiView:MKMapView,context:context){
let坐标=CLLocationCoordinate2D(纬度:34.011286,经度:-116.166868)
设span=MKCoordinateSpan(纬度:2.0,纬度:2.0)
设区域=MKCoordinateRegion(中心:坐标,跨度:跨度)
uiView.setRegion(区域,动画:true)
}
}
结构映射视图\u预览:PreviewProvider{
静态var预览:一些视图{
地图视图()
}
}
左:
iphone11
(地图和分隔符之间的巨大差距),右:使用
sizehattfits进行预览(正确)

问题: 为了使它工作,我必须调整什么?我是否需要另一个布局,或者我必须为整个内容设置一个固定的大小,或者我应该怎么做?我只是希望最外层布局中的元素尽可能紧密,然后在单个元素上应用填充物、偏移等


我遗漏了什么?

在设置框架高度之前,必须应用
边缘识别安全区域。如果首先将“高度”设置为300.0,它将计算没有安全区域的图元的位置,因此将占用更多空间,从而创建空白

MapView()
    .edgesIgnoringSafeArea(.top) // this will ignore the top spacing
    .frame(height: 300.0)

我没想到会这样。很高兴知道。非常感谢,不客气。是的,在SwiftUI中,它确实起到了修改视图的顺序的作用,这篇文章很好地描述了这个主题