问题描述

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)

参考阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: