UITextView startInteractionWithLinkAtPoint仅崩溃iOS 11

因此,当用户与URL链接进行交互时,我在UItextview中遇到崩溃.所有崩溃报告仅限iOS版本11.
这看起来像iOS 9中众所周知的bug,但是没有单个报告iOS版本低于11,而且在报告中我发现有趣的行:
UITextGestureClusterLinkInteract smallDelayRecognizer:

iOS 11(http://developer.limneos.net/?ios=11.0&framework=UIKit.framework&header=UITextGestureClusterLinkInteract.h)附带的.
无论如何,现在我用它来修复它

@available(iOS 10.0,*)
func textView(_ textView: UITextView,shouldInteractWith URL: URL,in characterRange: NSRange,interaction: UITextItemInteraction) -> Bool {
    UIApplication.shared.openURL(URL)
    return false
}

这不是很酷,因为你丢失了动作表菜单.
我的假设是它是由3D触摸引起的(比如先前版本中的长按),但如果我检测到3D触摸(75%,甚至是最大力的50%)并禁用此特定手势的链接交互 – 问题仍会出现.
有没有人对这个特殊问题有一些经验和更优雅的解决方法

解决方法

崩溃是由iOS 11.0和11.1上的UIDragInteraction / UITextDragAssistant引起的.它在iOS 11.2上修复.对UITextView进行子类化并禁用拖放手势可以防止任何iOS版本崩溃:
class NoDragDropTextView: UITextView {

    override func addGestureRecognizer(_ gestureRecognizer: UIGestureRecognizer) {

        // required to prevent drag and drop gestures
        // also prevents a crash on iOS 11.0-11.1
        gestureRecognizer.isEnabled = false

        super.addGestureRecognizer(gestureRecognizer)
    }
}

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...