swiftui - swiftui 2.0 图片库 onTapgesture 只显示数组中的第一张图片
问题描述
我正在为一个应用程序创建一个可重复使用的图库视图,并且在点击任何图片时遇到困难,它假设变成全屏但每次只显示数组中的第一张图片,无论点击图片。下面是我的代码,谢谢。
导入 SwiftUI
struct ReusableGalleryView: View { let greenappData: GreenAppNews
let gridLayout: [GridItem] = Array(repeating: GridItem(.flexible()), count: 3)
@State private var fullscreen = false
@State private var isPresented = false
var body: some View {
VStack{
ScrollView{
LazyVGrid(columns: gridLayout, spacing: 3) {
ForEach(greenappData.GreenAppGallery, id: \.self) { item in
Image(item)
.resizable()
.frame(width: UIScreen.main.bounds.width/3, height: 150)
.onTapGesture {
self.isPresented.toggle()
print(" tapping number")
}
.fullScreenCover(isPresented: $isPresented) {
FullScreenModalView( imageFiller: item)
}
.background(Color.gray.opacity(0.5))
}
}
.padding(.horizontal)
}
}
}
}
这是 json 数据的示例:
{“id”:“1”,“GreenAppGallery”:[“Picture-1”,“Picture-2”,“Picture-3”,“Picture-4”,“Picture-5”,“Picture-6”, “图片 7”、“图片 8”、“图片 9”、“图片 10”] },
解决方案
fullScreenCover
, likesheet
倾向于在 iOS 14 中使用isPresented:
.
要修复它,您可以更改为fullScreenCover(item: )
表单。
没有你所有的代码,我无法给你一个确切的版本,但要点是:
- 删除你的
isPresented
变量 presentedItem
用一个可选的变量替换它。可能是您画廊中的数据类型。请注意,它必须符合Identifiable
(意味着它必须具有id
属性)。- 而不是切换
isPresented
,设置presentedItem
为item
- 使用
fullScreenCover(item: ) { presentedItem in FullScreenModalView( imageFiller: presentedItem) }
并将其传递给您的presentedItem
变量 - 移动
fullScreenCover
使其连接到ForEach
循环而不是Image
使用此系统,您应该会看到它对正确的项目做出响应。
这是我的另一个答案,其中包括sheet
:@State var not updated as expected in LazyVGrid
推荐阅读
- deep-learning - Pytorch nn.CrossEntropyLoss 保持在 5 附近没有收敛
- reactjs - 如何重用该函数来更新 React 组件状态的不同部分?
- php - mySQL combine WHERE IN (?,?,?,..) clause with %?%
- react-native - 如何加密音频文件,然后解密并在本机反应中播放?
- html - 使文本选择将相邻元素视为单独的单词
- micronaut - 我们如何知道 Micronaut 中功能和可用功能的确切名称?
- google-sheets - 如何在查询函数中使用单元格中的文本作为参考
- java - Navigation Drawer 在特定活动中可用,而不是启动屏幕
- python - 如何获取字典列表并根据键值将它们拆分
- android - java.lang.NullPointerException 尝试调用虚方法 ShimmerFrameLayout.startShimmer()