0

我试图在GeometryReader这里使用基于可用大小构建视图,但是因为这个视图嵌入在带有填充的父视图中,所以它没有正确绘制。我从其他 SO 答案中知道,有些人说要使用GeometryReaderor.overlay.background我无法在这里找到一种方法:

 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)
                    }
                }
            }
        }
    }
4

1 回答 1

0

尝试以下

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
}
于 2021-04-05T09:38:21.833 回答