SwiftUI 在 iOS 18 中的 ForEach 点击手势逻辑发生改变的解决

news2024/10/10 14:05:08

在这里插入图片描述

概述

原本在 iOS 17 中运行良好的 SwiftUI 代码突然在 iOS 18 无法正常工作了,具体表现为原来视图中的的点击手势无法响应。

这是怎么回事呢?

在这里插入图片描述

且看分解!Let’s go!!!😉


问题现象

在这里插入图片描述

从下面的演示代码可以看到,我们在 List 容器的 ForEach 视图上添加了点击手势:

List {
    ForEach(showingDialogues, id: \.self) { dialog in
        Text(dialog)
            .font(.title3.weight(.bold))
            .listRowSeparator(.hidden)
    }
    .onTapGesture {
        if index < dialogues.count {
            showingDialogues.append(dialogues[index])
            index += 1
        } else {
            isShowQuizView = true
        }
    }
}

这在 iOS 17 中工作正常,但是升级至 iOS 18 后点击却无任何反应,检查发现是点击手势的回调并没有被触发。

解决之道

解决非常简单,我们只需将原来直接附着在 ForEach 上的手势修改器移动至外层(比如 List 上)即可:

List {
    ForEach(showingDialogues, id: \.self) { dialog in
        Text(dialog)
            .font(.title3.weight(.bold))
            .listRowSeparator(.hidden)
    }
}
.listStyle(.plain)
.onTapGesture {
    if index < dialogues.count {
        showingDialogues.append(dialogues[index])
        index += 1
    } else {
        isShowQuizView = true
    }
}

究其原因,我们注意到:之前旧代码中视图在显示时 showingDialogues 状态数组的内容为空。

@State var showingDialogues = [String]()

这在 iOS 18 之前的系统里,ForEach 仍会产生可点击范围,但是在 iOS 18 中并不会。

我们猜测原因是 iOS 18 对视图可见性检查更加严格了。因为按照常理来说当 ForEach 构造器对应的集合为空时其不应该再产生可点击的范围,所以这是 iOS 18 行为更加严谨的表现。

在这里插入图片描述

希望本篇博文可以一解大家的燃眉之急。


更多苹果开发中恢诡谲怪的问题和奇妙的调试秘笈,请小伙伴们移步我的精品专栏《开发疑难秒懂百科》观赏更多精彩的内容。

在这里插入图片描述

  • 开发疑难秒懂百科

总结

在本篇博文中,我们讨论了 iOS 18 中的 SwiftUi ForEach 视图点击逻辑和之前略有不同的情况,并给出解决方法。这可能是 SwiftUI 在 iOS 18 系统中变得更加严谨了。

感谢观赏!再会啦!😎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2202194.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动驾驶系列—GPS技术在自动驾驶中的应用与挑战:全面解析

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

海量案例!点击洞察2024年工业数字孪生发展趋势

如果能在虚拟世界中完美复制出现实中的物体或系统&#xff0c;将会带来怎样的变革&#xff1f;数字孪生正是这样一种神奇的存在——它将物理世界中的设备或系统转化为精确的虚拟模型&#xff0c;通过实时数据的采集、分析与应用&#xff0c;创造出一个与“物理实体”完全对应的…

Apache DolphinScheduler-1.3.9源码分析(二)

引言 随着大数据的发展&#xff0c;任务调度系统成为了数据处理和管理中至关重要的部分。Apache DolphinScheduler 是一款优秀的开源分布式工作流调度平台&#xff0c;在大数据场景中得到广泛应用。 在本文中&#xff0c;我们将对 Apache DolphinScheduler 1.3.9 版本的源码进…

python安装第三方库的问题与解决方法

1 速度过慢 大部分第三方库都是在国外网站&#xff0c;如果直接使用pip install 包名&#xff0c;下载速度会很慢&#xff0c;这对一些大型包是很致命的&#xff0c;如果下载中断则需要重头再来。 解决方案&#xff1a;使用国内镜像&#xff08;如清华镜像下载&#xff09;&a…

Vue 脚手架学习

1.使用 Vue 脚手架 1.1 初始化脚手架 1.1.1 具体步骤 第一步&#xff08;仅第一次执行&#xff09;&#xff1a;全局安装vue/cli。 npm install -g vue/cli 第二步&#xff1a;切换到你要创建项目的目录&#xff0c;然后使用命令创建项目 vue create xxxx 第三步&#xff1a;启…

AI绘画Stable Diffusion XL优化终极指南!

前言 如何在自己的显卡上获得SDXL的最佳质量和性能&#xff0c;以及如何选择适当的优化方法和工具&#xff0c;这一让GenAI用户倍感困惑的问题&#xff0c;业内一直没有一份清晰而详尽的评测报告可供参考。直到全栈开发者Flix San出手。 在本文中&#xff0c;Flix介绍了相关SD…

9个热门.Net开源项目汇总!

今天盘点下9月份推荐的9个开源项目&#xff08;点击标题查看详情&#xff09;。 1、Pidgin&#xff1a;一个轻量级、快速且灵活的 C# 解析库 Pidgin是基于C#的开源项目&#xff0c;是一个解析组合器库&#xff0c;提供了一个高级别的声明性工具来构建解析器&#xff0c;使得编…

雅达利“美洲虎“游戏机在iPhone模拟应用程序中重生

"美洲虎"是雅达利在 1993 年推出一年后&#xff0c;索尼的 PlayStation 和世嘉的土星接手之前&#xff0c;在日益拥挤的家用游戏机市场上保持竞争力的最后一次尝试。 虽然从未在商业上取得成功&#xff0c;但它仍然拥有一批忠实的粉丝&#xff0c;他们欣赏美洲虎独特…

SpringBoot框架下的美发店管理系统开发指南

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理美发门店管理系统的相关信息成为必然。开发…

未来已来:AIGC时代为办公方式带来智能化转型与革新

文章目录 一、Excel&#xff1a;从数据处理到智能分析二、Word&#xff1a;从文档编辑到智能写作三、PowerPoint&#xff1a;从幻灯片制作到智能演示四、AI智能办公的挑战与未来《AI智能办公实战108招&#xff1a;ChatGPTWordPowerPointWPS》编辑推荐内容简介作者简介内页插图目…

双十一好物必买榜:数码好物推荐!

​双十一该入手一些好物来准备度过下一年&#xff0c;选择几款数码好物和工作都用得到的实用好物陪伴冬天是能够让自己更积极的迎接生活&#xff0c;能够让自己更开心满足的方式。适当的购物也是能够缓解工作压力&#xff0c;心情不好的方法&#xff0c;但依然要选择买回家不会…

Python办公自动化之TXT

在日常办公中&#xff0c;我们常常需要处理大量的 TXT 文件&#xff0c;比如记录日志、存储数据或是阅读文件内容。Python 作为一款高效的编程语言&#xff0c;可以轻松完成这些任务&#xff0c;为我们的办公流程提供极大的便利。那么&#xff0c;如何利用 Python 办公自动化来…

PDFPatcher:一个无所不能的开源PDF处理工具

如果你工作中&#xff0c;经常需要处理PDF文件&#xff0c;那这款工具绝对可以满足你的所有需求&#xff0c;PDFPatcher一款功能强大的开源PDF处理工具。 01 项目简介 这是一款基于.NET Framework 4.0 到 4.8 版本开发的开源工具&#xff0c;主要采用 iText 和 MuPDF 这两个开…

快速了解2024与AI相关的诺贝尔奖大佬重要知识!

北京时间10月8日下午5点45分许&#xff0c;2024年诺贝尔物理学奖揭晓。美国普林斯顿大学科学家约翰霍普菲尔德&#xff08;John J. Hopfield&#xff09;和加拿大多伦多大学科学家杰弗里辛顿&#xff08;Geoffrey E. Hinton&#xff09;获奖&#xff0c;以表彰他们“基于人工神…

嵌入式面试——FreeRTOS篇(四) 信号量

本篇为&#xff1a;FreeRTOS信号量篇 信号量 1、什么是信号量 答&#xff1a;信号量是一种解决同步问题的机制&#xff0c;可以实现对共享资源的有序访问。 2、信号量简介 答&#xff1a; 当计数值大于0&#xff0c;表示有信号量资源。当释放信号量&#xff0c;信号量计数…

探索利用人工智能追踪逃犯的新技术

介绍 论文地址&#xff1a;https://arxiv.org/abs/2404.12626 近年来&#xff0c;"追逃游戏 "引起了人们的广泛关注。"追逃游戏 "模拟了多组追捕者与单个逃犯之间的追捕游戏。这种博弈发生在城市道路网等图上&#xff0c;有效地找到这种博弈的策略具有多种…

10月9-10日,优阅达邀您参与 2024 新加坡科技周,一站式体验亚洲前沿技术!

一场不容错过的亚洲商业技术盛会将于新加坡滨海湾金沙会展中心盛大开幕。 当全球化的浪潮席卷每一个角落&#xff0c;中国科技企业正站在新的起点&#xff0c;迎接出海的挑战与机遇。 一场不容错过的亚洲商业技术盛会 TECH WEEK SINGAPORE&#xff08;点击报名新加坡科技周&am…

HyperWorks基于几何投影的网格变形

在Altair&#xff08;HyperWorks&#xff09;里&#xff0c;使用本节将演示如何通过 line difference 功能&#xff0c;将已有网格以几何图形为目标进行投影&#xff0c;以生成全新的网格模型。 图 7-5 网格变形模型的状态 Step01&#xff1a;读取模型。 (1) 打开文件 Exerci…

C++入门基础知识106—【关于C++continue 语句】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C continue 语句的相关内容&#xff01;…

打不死的超强生命力

水熊虫是你可能听说过的小生物&#xff0c;它们能够在极端环境中生存&#xff0c;堪称地球上的“超强幸存者”。数十年来&#xff0c;科学家们试图通过各种极端实验杀死它们&#xff0c;但无论是把它们以900米/秒的速度发射&#xff0c;还是将它们暴露在宇宙辐射下&#xff0c;…