I have a List in my View that has an onTapGesture on each of the items in the list that is set to display a sheet of a separate View and passes selected object into it to display more information.
The information gets passed in but every time I tap on an item in the list it will display the sheet but scroll all the way back to the top of the List, does anyone know if there's a fix for this or if its just a bug?
Code Below:
@State var selectedItem: Item = Item()
@State var showPopup = false
var body: some View {
VStack{
List(items, id: \.self) {item in
ItemCard(Item: item)
.contentShape(Rectangle())
.onTapGesture(){
self.selectedItem = item
self.showPopup = true
}
}.id(UUID())
}.sheet(isPresented: $showPopup) {ItemDetails(i:selectedItem)}
}
CodePudding user response:
When you assign a new id to your List on every single render (like you do when you do .id(UUID()), SwiftUI considers it a completely new View. So, when you change your @State by tapping an item, SwiftUI thinks a new List is created and scrolls to the top. Remove .id(UUID()) to fix this.
