swiftui 2.0 图片库 onTapgesture 只显示数组中的第一张图片
Posted
技术标签:
【中文标题】swiftui 2.0 图片库 onTapgesture 只显示数组中的第一张图片【英文标题】:swiftui 2.0 Image Gallery onTapgesture only shows the first image in the array 【发布时间】:2021-02-24 02:00:47 【问题描述】:我正在为一个应用程序创建一个可重复使用的图库视图,并且在点击任何图片时遇到困难,它假设变成全屏,但无论点击什么图片,每次都只显示数组中的第一张图片。下面是我的代码,谢谢。
导入 SwiftUI
struct ReusableGalleryView: 查看 让 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”:[ “图片1”, “图片2”, “图3”, “图4”, “图片5”, “图6”, “图7”, “图8”, “图9”, “图 10” ] ,
【问题讨论】:
这是否回答了您的问题***.com/a/65480211/12299030? 【参考方案1】:fullScreenCover
和 sheet
一样,在 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
【讨论】:
我按照您的指示尝试了它没有工作,我不知道它是否允许在 *** 上通过电子邮件对应,以便我可以将我的代码发送给您以便更好地了解我的问题? 最好在这里创建一个最小的可重现示例以上是关于swiftui 2.0 图片库 onTapgesture 只显示数组中的第一张图片的主要内容,如果未能解决你的问题,请参考以下文章
尝试删除最后一个元素时,带有子项的 SwiftUI (2.0) 列表崩溃