SwiftUI 列表在点击查看时滚动到顶部 sheet
SwiftUI List scrolls to the top on tapping to view sheet
我的 View
中有一个 List
,它在列表中的每个项目上都有一个 onTapGesture
,设置为显示单独的 sheet
View
并将选定的对象传递给它以显示更多信息。
信息被传入,但每次我点击列表中的项目时,它都会显示 sheet
,但一直滚动到 List
的顶部,有人知道吗是否有解决此问题的方法,或者它只是一个错误?
代码如下:
@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)}
}
当您在每次渲染时为您的 List
分配一个新的 id
(就像您在 .id(UUID())
时所做的那样),SwiftUI 认为它是一个全新的 View
.因此,当您通过点击一个项目来更改 @State
时,SwiftUI 认为会创建一个新的 List
并滚动到顶部。
删除 .id(UUID())
以解决此问题。
我的 View
中有一个 List
,它在列表中的每个项目上都有一个 onTapGesture
,设置为显示单独的 sheet
View
并将选定的对象传递给它以显示更多信息。
信息被传入,但每次我点击列表中的项目时,它都会显示 sheet
,但一直滚动到 List
的顶部,有人知道吗是否有解决此问题的方法,或者它只是一个错误?
代码如下:
@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)}
}
当您在每次渲染时为您的 List
分配一个新的 id
(就像您在 .id(UUID())
时所做的那样),SwiftUI 认为它是一个全新的 View
.因此,当您通过点击一个项目来更改 @State
时,SwiftUI 认为会创建一个新的 List
并滚动到顶部。
删除 .id(UUID())
以解决此问题。