您的位置:首页 > 文旅 > 美景 > 码上游二维码制作_宁波优化网页基本流程_大数据精准客户_seo整站优化系统

码上游二维码制作_宁波优化网页基本流程_大数据精准客户_seo整站优化系统

2024/12/23 15:54:08 来源:https://blog.csdn.net/mydo/article/details/142685305  浏览:    关键词:码上游二维码制作_宁波优化网页基本流程_大数据精准客户_seo整站优化系统
码上游二维码制作_宁波优化网页基本流程_大数据精准客户_seo整站优化系统

在这里插入图片描述

概述

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

这是怎么回事呢?

在这里插入图片描述

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


问题现象

在这里插入图片描述

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

List {ForEach(showingDialogues, id: \.self) { dialog inText(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 inText(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 系统中变得更加严谨了。

感谢观赏!再会啦!😎

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com