LazyVGrid 内的 NavigationLink 循环背面的所有条目,SwiftUI

2023-11-23

我有一个图像网格。点击的每个图像都应在 NavigationView 上推送一个包含图像详细信息的视图。

导航链接按预期工作,但是当我按后退按钮时,它会打开下一个图像,依此类推,直到循环所有图像。到底是怎么回事?

这是View:

struct ImageGrid: View {
    
    @ObservedObject var part: Part
    @State private var showingImagePicker = false
    @State private var inputImage: UIImage?
    var body: some View {
        Button("add images"){
            self.showingImagePicker = true
        }
        LazyVGrid(columns: [GridItem(.adaptive(minimum:100))]){
            ForEach(part.images){ image in
                ZStack {
                    Image(uiImage: image.thumb)
                        .resizable()
                        .scaledToFit()
                    NavigationLink (
                        destination: ImageDetail(image:image),
                        label: {
                            EmptyView()
                        }
                    ).buttonStyle(PlainButtonStyle())
                }
            }
        }
        .sheet(isPresented: $showingImagePicker, onDismiss: loadImage) {
            ImagePicker(image: self.$inputImage)
        }
        
    }
    // other functions ...
    ...
}

这就是细节View

struct ImageDetail: View {
    
    @ObservedObject var image: TrainingImage
    var body: some View {
        VStack {
            Image(uiImage: image.content)
                .resizable()
                .scaledToFit()
        }
    }
}

EDIT:

这是一个隔离行为的独立示例。当网格位于表单部分内时,它似乎停止正常工作。消除导航链接正常工作的表单和部分



import SwiftUI

extension String: Identifiable {
    public var id:Int {
        self.hashValue
    }
}

struct ImageDetail: View {
    
    var image: String
    var body: some View {
        VStack {
            Image(uiImage: UIImage(systemName: image)!)
                .resizable()
                .scaledToFit()
        }
    }
}

struct ContentView: View {
    @State var images:[String] = ["plus", "minus"]
    var body: some View {
        NavigationView {
            Form {
                Section {
                    LazyVGrid(columns: [GridItem(.adaptive(minimum:100))]){
                        ForEach(images){ image in
                            NavigationLink (
                                destination: ImageDetail(image: image),
                                label: {
                                    Image(uiImage: UIImage(systemName: image)!)
                                        .resizable()
                                        .scaledToFit()
                                }
                            ).buttonStyle(PlainButtonStyle())
                        }
                    }
                }
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}


它是表单/列表功能来自动检测行中的链接,但是您在行中有多个链接,所以效果。解决方案是将单元格视图分开并隐藏自动检测的链接。

使用 Xcode 12.0 / iOS 14 进行测试

struct ContentView: View {
    @State var images:[String] = ["plus", "minus"]
    var body: some View {
        NavigationView {
            Form {
                Section {
                    LazyVGrid(columns: [GridItem(.adaptive(minimum:100))]){
                        ForEach(images){
                                    ImageCellView(image: $0)
                        }
                    }
                }
            }
        }
    }
}

struct ImageCellView: View {
    var image: String
    @State private var isActive = false
    var body: some View {
        Image(uiImage: UIImage(systemName: image)!)
             .resizable()
             .scaledToFit()
            .onTapGesture {
                self.isActive = true
            }
        .background(
             NavigationLink (
                  destination: ImageDetail(image: image), isActive: $isActive,
                  label: {
                    EmptyView()
                  }
             ))
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LazyVGrid 内的 NavigationLink 循环背面的所有条目,SwiftUI 的相关文章

  • 如何找到键盘未覆盖的视图部分(UIModalPresenationStyleFormSheet)?

    我有一个视图控制器 显示带有 UITextView 的视图 并且我想在键盘出现时调整视图的大小 以便 UITextView 不会被键盘覆盖 我几乎在所有情况下都可以正常工作 据我所知 仅当视图控制器以 ModalPresentationSt
  • Swift SpriteKit edgeLoopF​​romRect 问题

    下面的代码可以识别底部和顶部边缘场景和球按预期弹开 但是 那左边缘和右边缘现场的情况一直被破坏 如果施加足够的力 球会离开屏幕 然后最终返回 就好像场景的边缘超出了 iPhone 模拟器窗口的边缘 import SpriteKit clas
  • AppStore 提交:错误 ITMS-9000:“无效的捆绑结构 - 不允许二进制文件‘MyApp.app/BuildAgent’

    我陷入了以下错误 我根本不明白 错误 ITMS 9000 无效的捆绑结构 不允许使用二进制文件 MyApp app BuildAgent 您的应用程序可能只包含一个可执行文件 当我使用 Xcode 从 Archive 导出到 IPA 时 我
  • React-native-vision-camera无法访问后面的普通摄像头

    我正在尝试在 iPhone 11 Pro 上使用 普通 相机 我使用反应本机视觉相机 当我运行这段代码时 const devices useCameraDevices const deviceBack devices back consol
  • locationOfTouch 和 numberOfTouches

    你好 我有这个识别器 设置为 2 次触摸 但它只返回一个 而不是两个 CGPoint void gestureLoad UIGestureRecognizer recognizer recognizer UITapGestureRecogn
  • 如何保护 iOS 应用程序免受任何操作系统攻击(在越狱设备上)

    我希望保护我的应用程序数据 以防任何操作系统攻击或越狱 iOS 设备上的未经授权的访问 在这种情况下 有什么方法可以检测此类威胁并保护应用程序数据 虽然我同意 jrturton 的说法 但如果您有想要保护的关键数据免受流氓应用程序 而不是用
  • Objective-C UILabel 作为超链接

    我正在尝试做一个UILabel一个链接UIWebView 我怎样才能做一个UILabel作为超链接 您可以使用 UITapGestureRecognizer 它将实现与您想要的类似的功能 UILabel myLabel UILabel al
  • 有关 Swift 编译器选项的文档

    您好 我想开始在 Apple Swift 语言上运行一些微基准测试 然而 我觉得很难找到有关编译器优化的不同选项的适当文档 我读过很多关于其他人的语言微基准的问题和文章 但是如果能有一些关于该主题的可靠文档那就太好了 在最新的测试版中 使用
  • CALayer边框奇怪问题

    我正在向 CALayer 添加边框 但有一些奇怪的行为 在我应用的边框之后出现模糊边框 参见屏幕截图 这是我的代码 void configureLabel self hidden YES self textAlignment NSTextA
  • ios swift parse:从 3 个类收集数据

    我有这样的结构 User CardSet 带有指向 User objectId 的指针 user 和 col name 带有点 cards 的卡片到 Card Set objectId 和列 name 我想选择所有卡数据 包括当前用户的卡集
  • iOS:生成pdf时绘制文本时如何设置字体?

    我在ios应用程序中使用drawpdf函数生成pdf 同时调用nsobject类中的drawtext函数 它根据我指定的框架和字符串清楚地绘制文本 我的代码是 void drawText NSString textToDraw inFram
  • 为什么 iOS 启动屏幕很慢?

    我的 iOS 应用程序启动屏幕大约需要 3 5 秒 我有一张将在启动屏幕后加载的地图 我的用户必须等待启动屏幕加载 然后再等待 3 秒才能加载地图 有没有办法最大限度地减少启动屏幕时间 基本上这种延迟意味着you在启动过程中做了一些非常错误
  • 会话重新启动后 AVcapture 会话启动缓慢

    我有一个主视图控制器 它连接到具有 avcapturesession 的第二个视图控制器 我第一次从主视图控制器转向捕获会话控制器 大约需要 50 毫秒 使用 仪器 检查 然后我从捕获会话返回到主视图控制器 然后从主控制器返回到 avcap
  • AVAssetExportSession 无法导出从 iCloud 下载的视频

    我正在尝试创建从用户相册中选择的视频的缩小版本 输出的最大尺寸为 720p 因此 在检索视频时 我使用 mediumQualityFormat as the deliveryMode 如果用户设备中不存在原始视频或其中等质量版本 这会导致
  • UIViewControllerAnimatedTransitioning:旋转更改后黑屏片段

    我已经创建了一个视图控制器转换 只要我不更改设备方向 一切都正常 图 1 显示了应有的屏幕 然后我切换到下一个视图控制器 在其中更改方向 现在我回到第一个视图控制器并再次切换方向 然后我得到的结果如图 2 所示 出现黑色边框 请不要介意屏幕
  • 如何解决 Xcode 5 中的红色(已移动)文件?

    在 Xcode 4 中 当您要移动文件时 可以通过单击右侧菜单中的按钮并通过 Finder 选择新位置来解析文件的新位置 在 Xcode 5 中 右侧菜单中没有按钮 我还没有找到任何方法通过右键单击文件或顶部菜单栏选项来指定文件的新位置 在
  • UIView 圆角 - Swift 2.0?

    我会尝试将一些项目更新到 Swift 2 0 我有一个视图 左上角有一个圆角 在 Swift 没有警告 没有错误 只是没有圆角 这就是它在 Swift let maskPath UIBezierPath roundedRect conten
  • 模态转场需要点击 2 次而不是 1 次

    我的 UITableView 需要点击 2 次才能显示所选单元格的详细信息页面 一次用于选择 另一次用于显示详细信息视图 我希望有一个 CLI 直接显示所单击单元格的详细视图 我在 UITableViewManager m 中使用此方法的模
  • iPhone 上的纵向 UISplitViewController 在 iOS 8 中始终显示主视图和细节视图

    UISplitViewController in portrait在 iPhone 上始终显示主控和细节iOS 8 我尝试子类化UISplitViewController并将其配置为同时显示主视图和细节视图 但没有任何效果 class AP
  • 是否可以跨 2 个不同的 iOS 应用程序访问数据?

    假设我在 App1 中存储了一些 ID 数据 并希望在同一设备上的 App2 中访问它 平台上可以这样吗 如果没有的话有什么解决方法吗 您可以使用iOS 钥匙扣 http developer apple com library ios do

随机推荐

  • 如何在 Cassandra 中创建自动增量 ID

    我们知道在SQL数据库中创建自增ID很容易 Cassandra中有没有好的解决方案 ID 应该用于键名或列名 创建全局数字序列在分布式系统中实际上没有任何意义 使用UUIDs 因为你必须让所有参与者都同意并接受序列的演变 在简单的实现下
  • HttpClient PostAsync 无效的帖子格式

    我正在尝试使用 HttpClient 的 PostAsync 登录网站 然而它总是失败 当我使用 WireShark 跟踪连接时 我发现它错误地发布了数据 Code var content new FormUrlEncodedContent
  • ADT插件安装问题Eclipse 3.7 Ubuntu 11.10 [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 我正在尝试为 Eclipse 3 7 和 Ubuntu
  • 我们可以使用 php 中的 ini_set() 函数将“allow_url_fopen”设置为“ON”吗?

    这个问题在这里已经有答案了 我们可以使用php中的ini set 函数将 allow url fopen 设置为 ON 吗 你不能 允许 url fopen 具有可变模式PHP INI SYSTEM Entry can be set in
  • iphone的TableView动态添加一行

    当我在表中选择一行时 我需要在表视图中添加新行 我应该使用以下方法吗 void insertRowsAtIndexPaths NSArray indexPaths withRowAnimation UITableViewRowAnimati
  • java.lang.ClassNotFoundException:org.apache.jsp.WEB_002dINF.pages.LandingPage_jsp

    打开项目时我遇到两个非常奇怪的错误 如果我打开登陆页面并不断刷新它 错误消息会在下面的两条消息之间交替显示 要么我得到这个 org apache jasper JasperException WEB INF pages LandingPag
  • 用于复杂写入的 Firebase 提交/回滚

    我正在使用 Firebase 编写一个金融应用程序 为了提交收据 还需要更新许多其他对象 为了使数据有效 所有数据更新都需要成功完成 如果其中一项写入出现错误 则必须回滚所有更新 例如 如果用户提交收据 则必须更新收据对象以及发票对象以及其
  • java.lang.VerifyError:在分支目标处期望有堆栈图帧

    成功编译了项目并使用 Maven 进行了构建 这是我的第一个 Maven 项目 但我不知道为什么会出现以下错误 在 tomcat 上部署战争并点击我的 url 浏览器中显示以下错误 java lang VerifyError Expecti
  • Android中,Handler是运行在主线程还是其他线程?

    我有以下代码 public class SplashScreen extends Activity private int splashTime 5000 Called when the activity is first created
  • ntext 数据的 GROUP BY

    我想看看场上有多少次MSGTEXT表中重复MMOUTBOUND 为此 我使用以下查询 SELECT MSGTEXT COUNT TotalCount FROM MMOUTBOUND GROUP BY MSGTEXT HAVING COUNT
  • Angular Material 日期选择器 - 仅月份和年份

    我希望我的角度材料日期选择器仅显示月份 年份 没有日子 这是我的日期选择器
  • Eclipse 中的 Grails 2.2.0 支持

    我正在尝试使用 eclipse jee juno 创建一个 grails 2 2 0 项目 它给了我一个错误 项目期望的 Groovy 编译器级别与工作区编译器级别不匹配 项目编译级别为 1 8 X 工作区编译器级别为 1 7 X 转到项目
  • Apache POI 加载 XSSFWorkbook 类时出错

    我正在尝试编写一个与 Excel 文档一起使用的程序 但 HSSF 格式对于我的要求来说太小了 我正在尝试转向 XSSF 但在尝试使用它时不断出现错误 我设法通过将 xmlbeans 2 3 0 jar 和 dom4j 1 6 jar 添加
  • 使用 proc_open 时从 STDIN 管道读取

    我正在尝试制作一个网站 人们可以在线编译和运行他们的代码 因此我们需要找到一种交互式方式让用户发送指令 其实大家首先想到的是exec or system 但是当用户想要输入某物时 这种方式就行不通了 所以我们必须使用proc open 例如
  • 如何以正确的顺序安装多个 .whl 文件

    我最近发现自己处于必须在没有互联网连接的机器上安装 python 项目的所有依赖项 20 的情况 我用了pip download 得到所有的 whl文件并手动传输它们 直到现在 我才完全欣赏 pip 的天才 以及它如何自行计算出依赖关系树并
  • 如何检查变量的类型是否与变量中存储的类型匹配

    User u new User Type t typeof User u is User gt returns true u is t gt compilation error 如何以这种方式测试某个变量是否属于某种类型 其他答案都有重大遗
  • 如何将 JFrame 嵌入到 JavaFX 2.0 应用程序中?

    我在 stackoverflow 上广泛搜索了有关该主题的帮助 但我发现的问答很旧 并且当前版本的 JDK 的答案已更改 我目前使用的是 7u51 请注意 我一开始就不是非常精通 Swing 但我相信我了解基础知识 我一直更关注应用程序内部
  • 在订单电子邮件模板中添加自定义属性 - Magento

    我创建了一个 公司名称 属性 该属性会添加到我的客户帐户信息中 并且是必填字段 它会在注册 表单和编辑页面上得到很好的填写 并且也会显示在后端的客户网格上 但是 我无法在任何订单电子邮件模板中显示公司名称 我相信这是因为我的订单表中既没有任
  • 在哪里可以找到 LDAP Active Directory 消息的列表及其含义?

    我收到错误 LDAPException 无效凭证 49 无效凭证LDAPException 服务器消息 80090308 LdapErr DSID 0C0903A9 注释 AcceptSecurityContext 错误 数据 52e v1
  • LazyVGrid 内的 NavigationLink 循环背面的所有条目,SwiftUI

    我有一个图像网格 点击的每个图像都应在 NavigationView 上推送一个包含图像详细信息的视图 导航链接按预期工作 但是当我按后退按钮时 它会打开下一个图像 依此类推 直到循环所有图像 到底是怎么回事 这是View struct I