KVO - UIScrollView.contentSize误报?

时间:2018-03-03 13:49:27

标签: ios swift uiscrollview wkwebview key-value-observing

使用WKWebview,我正在尝试监控webView.scrollView.contentSize的更改。问题是我收到了相同大小的多个通知。每当我滚动时,即使contentSize保持不变,也会发送通知。我知道我可以通过在我的处理程序中跟踪以前的大小来解决这个问题,但我对KVO如何在引擎盖下工作并不担心这可能会很昂贵。

   let handler = {(scrollView: UIScrollView, change: NSKeyValueObservedChange<CGSize>) in
        if let contentSize = change.newValue {
            print ("ContentSize", contentSize)
        }
    }

    obs.insert(webView.scrollView.observe(\UIScrollView.contentSize, options: [NSKeyValueObservingOptions.new], changeHandler: handler))

输出:(从滚动生成)

ContentSize (1366.0, 2061.0) ContentSize (1366.0, 2061.0) ContentSize (1366.0, 2061.0) ContentSize (1366.0, 2061.0)

我不明白为什么会发现此通知,因为contentSize不是新值。我误会了什么吗?我应该自己存储prevSize并检查处理程序中的更改吗?

1 个答案:

答案 0 :(得分:1)

UIKit中的课程通常不支持KVO,如下所述:

https://developer.apple.com/library/content/documentation/General/Conceptual/DevPedia-CocoaCore/KVO.html

&#34;虽然UIKit框架的类通常不支持KVO,但您仍然可以在应用程序的自定义对象中实现它,包括自定义视图。&#34;

除非一个类被记录为支持KVO,否则你应该假设它没有(即使它似乎工作)。它似乎适用于iOS的一个版本,而不是下一个版本......