【问题标题】:UITextView stange animation glitch on paste action (iOS11)粘贴操作时 UITextView stange 动画故障(iOS11)
【发布时间】:2019-01-17 03:33:18
【问题描述】:

我正面临一个非常奇怪的错误。当我在 UITextView 中粘贴任何内容时,我会收到令人惊讶的动画故障。

为了重现它,我刚刚创建了一个黑色的.xcodeproj,通过情节提要将UITextView 添加到ViewController 并运行了应用程序。

我发现的唯一类似问题是https://twitter.com/twostraws/status/972914692195790849 它说这是iOS11中UIKit的错误。但是我的 iPhone 上有很多带有UITextview 的应用程序可以在 iOS11 上正常运行。 您可以在此处查看视频中的错误 – https://twitter.com/twostraws/status/972914692195790849

任何建议或帮助将不胜感激。 我试过什么? - 以最小的变化尝试了新的清晰项目; - 禁用所有自动更正类型; - 删除了约束; - 在不同版本的几款 iPhone 上试用过 - 11.2.5 和 11.4.2。

附上原始项目。它是在Swift 4.1Xcode 9.4(9F1027a) 上制作的 https://ufile.io/fzyj8

【问题讨论】:

    标签: ios objective-c swift uikit uitextview


    【解决方案1】:

    我检查了我 iPhone 上的一些其他应用程序,例如 Todoist,并在那里发现了相同的错误。但我也找到了解决方案。 希望苹果能尽快修复这个bug。

    因此您可以实现UITextPasteDelegate 并禁用粘贴动作的动画。这个API只有iOS11+才有,不过貌似bug也只有iOS11才有。

    class ViewController: UIViewController {
    
        @IBOutlet weak var textView: UITextView!
    
        override func viewDidLoad() {
            super.viewDidLoad()
            textView.pasteDelegate = self
        }
    }
    
    extension ViewController: UITextPasteDelegate {
        func textPasteConfigurationSupporting(_ textPasteConfigurationSupporting: UITextPasteConfigurationSupporting, shouldAnimatePasteOf attributedString: NSAttributedString, to textRange: UITextRange) -> Bool {
            return false
        }
    }
    

    【讨论】:

    • 非常感谢您找到这个。这个问题已经让我发疯了一段时间。在我的测试中(在意识到 UITextPasteDelegate 选项的存在之前),与更复杂的 UITextView 用例(支持调整键盘外观的大小、响应文本事件等)相比,使用标准 UITextView 时动画似乎更好。我仍然想知道动画不正确的根本原因是某处缺少超级调用,这会导致 iOS 为动画拍摄快照时出现问题。
    • @solesignal 我也想知道。我会继续关注新的 iOS 版本。希望修复后不要忘记在这里写回。
    • 我在 iOS 12 中也看到了。想知道这是我的问题还是 UIKit 中的错误
    • 此问题在 iOS 13 中已解决,但在较低版本中仍然存在。感谢这个惊人的解决方案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-27
    • 2014-11-24
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    相关资源
    最近更新 更多