Ios 使用GeometryReader而不修改视图

Ios 使用GeometryReader而不修改视图,ios,swiftui,geometryreader,Ios,Swiftui,Geometryreader,我试图在此处使用GeometryReader根据可用大小构建视图,但是,由于此视图嵌入到带有填充的父视图中,因此无法正确绘制。我从中了解到,有些人说使用GeometryReader作为覆盖或背景,但我在这里找不到这样做的方法: var body: some View { GeometryReader { geometry in HStack(alignment: .bottom, spacing: 5) { ForEach

我试图在此处使用
GeometryReader
根据可用大小构建视图,但是,由于此视图嵌入到带有填充的父视图中,因此无法正确绘制。我从中了解到,有些人说使用
GeometryReader
作为
覆盖
背景
,但我在这里找不到这样做的方法:

 var body: some View {
        GeometryReader { geometry in
            HStack(alignment: .bottom, spacing: 5) {
                ForEach(dataStore.sleepOrAwakeSpans) { sleepOrAwakeSpan in
                    VStack {
                        RoundedRectangle(cornerRadius: 5.0)
                            .frame(width: geometry.size.width * CGFloat((sleepOrAwakeSpan.endTime.timeIntervalSince(sleepOrAwakeSpan.startTime) / athlyticDataStore.sleepOrAwakeSpans.map { $0.endTime.timeIntervalSince($0.startTime) }.reduce(0, +))), height: 25)
                            .foregroundColor(sleepOrAwakeSpan.asleep == false ? TrackerConstants.scaleLevel6Color : TrackerConstants.scaleLevel2Color)
                    }
                }
            }
        }
    }
试试下面的方法

var body: some View {
    Color.clear.overlay(     // << consumes available space of parent
        GeometryReader { geometry in
            HStack(alignment: .bottom, spacing: 5) {
                ForEach(dataStore.sleepOrAwakeSpans) { sleepOrAwakeSpan in
                    VStack {
                        RoundedRectangle(cornerRadius: 5.0)
                            .frame(width: geometry.size.width * CGFloat((sleepOrAwakeSpan.endTime.timeIntervalSince(sleepOrAwakeSpan.startTime) / athlyticDataStore.sleepOrAwakeSpans.map { $0.endTime.timeIntervalSince($0.startTime) }.reduce(0, +))), height: 25)
                            .foregroundColor(sleepOrAwakeSpan.asleep == false ? TrackerConstants.scaleLevel6Color : TrackerConstants.scaleLevel2Color)
                    }
                }
            }
        })     // end of overlay
}
var主体:一些视图{

彩色。透明。覆盖(//这取决于您在此处尝试执行的操作。大多数人建议使用GeometryReader作为覆盖/背景视图,因为它会使用父视图中可用的大小。当像上面那样使用GeometryReader时,它将尝试使用视图中的所有可用空间,其中将填充其子视图。代码d不知道,只要HStack间距为0,这就可以工作,但当我尝试在每个圆角之间添加更多空间(例如,在我的示例中为5)时,它几乎会从屏幕上消失。我如何解释间距?