本文介绍: iOS 16 适配之 莫名其妙得崩溃

问题描述

9月13日 iOS 发布了 16 ,应用崩溃在 NSTextContentStorage locationFromLocation:withOffset: 如下图
在这里插入图片描述
实际情况是 UITextField 调用下图 Api崩溃
在这里插入图片描述


原因分析

各种资料各种查 可能是改了默认文本引擎为 TextKit2的原因 。
TextKit 2 是 Apple 在 iOS 15 和 macOS 12 中引入的新文本布局引擎。在 iOS 16 和 macOS 13 中,Apple 自动为 Apple 的应用程序第三方应用程序选择了 TextKit 2。也就是说现在默认就是 TextKit 2 了,以前默认是 1 。
api兼容? Apple 得 Bug

解决方案

一个博客找到了一些资料https://lapcatsoftware.com/articles/textview5.html这个叫Jeff Johnson得哥们,联系了苹果,但是苹果说:
谢谢你的反馈。这看起来是一个需要解决的问题。
在iOS 16中新增,UITextView默认文本引擎是TextKit 2。
这段代码使用TextKit 1 API实现自定义文本附件(attachmentBoundsForTextContainer:proposedLineFragment:glyphPosition:characterIndex:),这与TextKit 2不兼容
这里有几个不同选项
为了恢复之前的行为并避免崩溃,您可以显式设置UITextView使用TextKit 1并继续使用TextKit 1 API。有多种方法可以做到这一点,基于报告提交应用程序,最简单的方法是将 Interface Builder 中“ Text Layout选项设置为“TextKit 1”(而不是“defaut”)。
另一种选择是使用TextKit 2引擎移到基于视图的文本附件
有关TextKit 1/TextKit 2兼容性和基于视图的文本附件的更多信息,请参考WWDC22视频“TextKit和文本视图中的新内容”和附带的示例代码可以这里找到:https://developer.apple.com/videos/play/wwdc2022/10090/

这个博主是 UITextView 出得问题,而我是UITextField并且没有使用Interface Builder。

大致意思就是说 老子不管,你自己想办法。要么继续使用 TextKit 1 ,要是用 TextKit 2重新写。
知道UITextField怎么设置使用 TextKit 1,完犊子的我只能重写
一篇关于保持 TextKit 1 得帖子https://developer.apple.com/forums/thread/708610)

原文地址:https://blog.csdn.net/chechengxue/article/details/126852806

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_41166.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注