iOS 11:输入时UITextView typingAttributes重置

时间:2017-09-26 07:27:52

标签: ios uitextview ios11

我使用typingAttributes设置新字体。在 iOS 10 上,一切正常,但在 iOS 11 上,第一个输入的字符是正确的,但是属性正在重置为之前的属性,第二个字符是键入的以前的字体。这是一个错误吗?我能以某种方式解决它吗?

4 个答案:

答案 0 :(得分:6)

我遇到了同样的问题,并最终通过在每次编辑后再次设置typingAttributes来解决它。

Swift 3

func textViewDidChange(_ textView: UITextView) {
    NotesTextView.typingAttributes = [NSForegroundColorAttributeName: UIColor.blue, NSFontAttributeName: UIFont.systemFont(ofSize: 17)]
}

答案 1 :(得分:5)

为什么会这样:

自iOS 11以来,Apple更新了typingAttributes

  

此字典包含要应用于新键入文本的属性键(和相应值)。当文本视图的选择发生变化时,字典的内容会自动清除。

如何修复它:

@Serdnad的代码有效,但会跳过第一个字符。在尝试了我能想到的所有内容后,我的发现就是

<强> 1。如果您只想为文字视图添加一个通用输入属性

只需在此委托方法中设置一次输入属性,就可以使用此单一通用字体设置

func textViewShouldBeginEditing(_ textView: UITextView) -> Bool {
    //Set your typing attributes here
    textView.typingAttributes = [NSAttributedStringKey.foregroundColor.rawValue: UIColor.blue, NSAttributedStringKey.font.rawValue: UIFont.systemFont(ofSize: 17)]
    return true
}

enter image description here

<强> 2。就我而言,具有属性的富文本编辑器始终在变化:

在这种情况下,我必须在输入任何内容后每次都设置输入属性。感谢iOS 11的更新!

但是,不是在textViewDidChange方法中设置它,而是在shouldChangeTextIn方法中执行此方法效果更好,因为在将字符输入文本视图之前调用它。

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    textView.typingAttributes = [NSAttributedStringKey.foregroundColor.rawValue: UIColor.blue, NSAttributedStringKey.font.rawValue: UIFont.systemFont(ofSize: 17)]
    return true
}

enter image description here

答案 2 :(得分:3)

使用typingAttributes时内存使用出现问题

此解决方案有效:

textField.defaultTextAttributes = yourAttributes // (set in viewDidLoad / setupUI)

使用typeingAttributes有什么问题:在某个时间点,内存使用量上升并且从未停止,并导致应用程序冻结。

答案 3 :(得分:0)

从iOS 11开始,Apple清除每个角色后的属性。

  

当文本视图的选择发生变化时,字典的内容会自动清除。

https://developer.apple.com/documentation/uikit/uitextview/1618629-typingattributes