我有一个列表,它通过营养 API 进行搜索并在列表中显示搜索结果。在升级到 iOS 18 之前,一切都运行正常。
现在,当创建列表时,有时 onTapGesture 会识别并加载食物详情页面,而列表中的其他项目根本没有注册点击?
为什么会突然改变?我现在不知道如何让列表中的每个项目都可以点击。
List(searchResults, id: \.fid) { food in
VStack {
HStack {
VStack(alignment: .leading) {
Text(food.name)
.font(.system(size: 20))
.padding(.bottom, 4)
Text("\(food.brand) - \(extractCalories(from: food.calories) ?? "nil")")
.font(.system(size: 16))
}
.padding()
.foregroundColor(Color.white)
Spacer()
VStack {
Image(systemName: "chevron.right")
.foregroundColor(Color.white)
.padding(.trailing, 8)
}
}
.padding([.leading, .trailing], 8.0)
.padding(.top, 0)
.background(
Color(red: 40 / 255, green: 40 / 255, blue: 40 / 255)
.clipShape(RoundedRectangle(cornerRadius: 10))
)
}
.onAppear {
print(searchResults)
}
.contentShape(Rectangle()) // Ensures the entire area is tappable
/*.simultaneousGesture(TapGesture().onEnded {
print("TAPPED FOOD ID: \(food.fid)")
tappedFoodID = food.fid
tappedFoodName = food.name
showFoodItemDetail = true
})*/
.onTapGesture(count: 1) {
print("TAPPED FOOD ID: \(food.fid)")
tappedFoodID = food.fid
tappedFoodName = food.name
showFoodItemDetail = true
}
.listRowSeparator(.hidden)
.listRowBackground(Color.clear)
.scrollContentBackground(.hidden)
.padding(.horizontal, -16) // Remove horizontal padding for the whole list
.padding(.vertical, 0) // Remove vertical padding for the whole list
}
4
最佳答案
1
我遇到了同样的问题。我将代码修改为以下内容,并且可以正常工作。
.contentShape(Rectangle())
.highPriorityGesture(
TapGesture().onEnded {
print("TAPPED")
}
)
|
TabView
和还有一个NavigationStack
,请显示这些是如何设置的以及如何List
使用的。–
–
–
–
|