【问题标题】:iOS 9: KVO no longer workingiOS 9:KVO 不再工作
【发布时间】:2025-12-18 10:40:01
【问题描述】:

我在 UITextView 上有一个观察者来检测它的内容大小是否在变化:

[_textView addObserver:self forKeyPath:@"contentSize" options:NSKeyValueObservingOptionNew context:NULL];

这段代码总是可以调用以下函数,我在其中调整 UITextView 的大小:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

然而,在 iOS 9 中,这个函数永远不会被调用。 iOS 9 发生了什么变化,我该如何解决?

【问题讨论】:

  • 仅供参考 - 我正在使用类似的代码来检测 UITextView 的内容大小变化,它在 iOS 9 下对我来说仍然可以正常工作。但我通过 0 获得选项。
  • 很高兴知道 - 谢谢!作为记录,使用下面的建议和子类化 UITextView 让它再次工作并且感觉更可靠!

标签: ios objective-c key-value-observing ios9


【解决方案1】:

如果您搜索 UIKit 和 KVO 合规性,您会发现每个人都说您不能依赖它。请参阅 this questionthis question

我不知道发生了什么变化,但我认为你应该只继承 UITextView 并重载 setContentSize: 如果你想知道它什么时候发生变化。

【讨论】: