我正在我的应用程序中构建一个部分,允许用户通过瞄准目标来训练他们的运动技能。用户可以在列表中看到他们的目标。如果有1个人以上在我的应用程序中使用此功能,他们的培训目标列表将在滚动视图中并排放置。我希望我的应用程序自动滚动到当前活动的用户。我使用的代码是:
func getTrainingTargetsScrollView(size: CGSize) -> some View {
let players: [DSPlayer] = trainingController.currentExercise?.players ?? []
return ScrollViewReader { value in
ScrollView(.horizontal) {
HStack(spacing: 0) {
ForEach(players, id: \.id) { player in
ExerciseTable(player: player)
.frame(width: size.width)
}
}
}
.onReceive(trainingController.$currentPlayer, perform: { newValue in
if let id = newValue?.id {
withAnimation {
value.scrollTo(id)
}
}
})
.frame(height: size.height - 130)
}
}
onReceive被触发,我已经验证了它传递的玩家是正确的,并且与滚动视图中的玩家具有匹配的ID。但是,它根本不会滚动。
有人能看出我做错了什么吗?