iOS 11:输入时UITextView typingAttributes重置

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

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

斯威夫特3

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

为什么会这样:

Apple自iOS 11起更新了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 } 

在此处输入图像描述

2.在我的例子中,富文本编辑器的属性始终在变化:

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

但是,不是在shouldChangeTextIn方法中设置它,而是在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 } 

在此处输入图像描述

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

当文本视图的选择发生更改时,将自动清除字典的内容。

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

使用typingAttributes有内存使用问题

该解决方案有效:

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

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