Swiftui 使用异步加载行列表并使用GeometryReader布局时的竞争条件

Swiftui 使用异步加载行列表并使用GeometryReader布局时的竞争条件,swiftui,swiftui-list,Swiftui,Swiftui List,这是我的后续问题 我有一个为每行异步加载图像的列表,它的高度使用GeometryReader设置。完整代码: struct CountryCell:视图{ 让国家:国家 @状态变量childSize:CGSize=.init(宽度:0,高度:50) var body:一些观点{ HStack{ AsyncImage(url:Endpoints.flag(countryCode:country.flagCode).url,占位符:Image(“flag”)) .aspectRatio(内容模式:.

这是我的后续问题

我有一个为每行异步加载图像的列表,它的高度使用GeometryReader设置。完整代码:

struct CountryCell:视图{
让国家:国家
@状态变量childSize:CGSize=.init(宽度:0,高度:50)
var body:一些观点{
HStack{
AsyncImage(url:Endpoints.flag(countryCode:country.flagCode).url,占位符:Image(“flag”))
.aspectRatio(内容模式:.fit)
.frame(宽度:DeviceMetrics.size.width*0.25,高度:self.childSize.height)
VStack(对齐:。前导,间距:5){
Text(“Country:).bold()+Text(self.Country.name)
Text(“大写:).bold()+Text(self.country.Capital)
文本(“货币:).bold()+文本(self.country.Currency)
}
.frame(最小宽度:0,最大宽度:。无穷大,对齐:。前导)
.背景(
GeometryReader{proxy->AnyView中的
DispatchQueue.main.async{
self.childSize=proxy.size
}
返回任意视图(颜色。清除)
})
}
}
}
运行它,图像将不会替换占位符(可能十分之一会随机显示),尽管网络请求已发出。我想不出来,但我有预感,这是GeometryReader和AsyncImage在触发布局时的竞争条件。如果更换:

.frame(width: DeviceMetrics.size.width * 0.25, height: self.childSize.height)
与:

然后图像将正确显示。同样,如果您注释掉GeometryReader,事情也会开始起作用

如有任何提示,将不胜感激

.frame(width: DeviceMetrics.size.width * 0.25)