Содержимое CardView
внутри ForEach
из CardNavigatorView
корректно обновляется благодаря асинхронной задаче загрузки c (внутри CardView
), которая загружает изображение, и Image()
отображается правильно, но я обнаружил, что рамка вокруг CardView
в CardNavigatorView
не обновляется, соответственно, в результате чего Text("test")
появляется в середине изображения CardView
, а не отталкивается рамкой CardView
, если оно было обновлено правильно, чтобы окружить изображение. border(Color.red, width:2)
помог мне сделать вывод так, как будто он пуст. Любое предложение, пожалуйста?
struct CardNavigatorView: View {
@ObservedObject var model: CardNavigatorViewModel
@State private var offset: CGFloat = 0
let spacing: CGFloat = 10
var body: some View {
GeometryReader { geometry in
return ScrollView(.horizontal, showsIndicators: true) {
HStack(spacing: self.spacing) {
ForEach(self.model.cardSource.cards, id:\.hashString) { card in
CardView(card: card)
.frame(width: geometry.size.width).border(Color.red, width: 2)
}
}
}
.content.offset(x: self.offset)
.frame(width: geometry.size.width, alignment: .leading)
}
Text("Test")
}
}
CardView объявлен следующим образом
struct CardView: View {
@ObservedObject var card: Card
@EnvironmentObject var userData: UserData
var body: some View {
GeometryReader { geometry in
VStack {
ZStack(alignment: .topTrailing) {
ImageViewContainer(imageUrl: self.card.imagesURL[0])
.frame(width:geometry.size.width)
.scaledToFill()
.clipped()
NameView(name: self.card.name)
.frame(width:geometry.size.width)
Button(action:{
self.userData.toggleFav(card:self.card)
}) {
ZStack{ Image("fav_icon").renderingMode(Image.TemplateRenderingMode?.init(Image.TemplateRenderingMode.original))
.resizable()
.aspectRatio(contentMode:.fit)
.frame(width:25).opacity(self.card.isFav ? 1 : 0).offset(x:-10, y:10)
Image("not_fav_icon").renderingMode(Image.TemplateRenderingMode?.init(Image.TemplateRenderingMode.original))
.resizable()
.aspectRatio(contentMode:.fit)
.frame(width:25).opacity(self.card.isFav ? 0 : 1).offset(x:-10, y:10)
}
}
}.border(Color.green, width: 3)
Text("\(self.card.description)")
Text("Note : \(self.card.ratingString)")
}.onAppear{self.userData.setUserSettingsTo(card: self.card)}
}
}
}