KVO - UIScrollView.contentSize误报?

问题描述 投票:0回答:1

使用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并检查处理程序中的更改吗?

ios swift uiscrollview wkwebview key-value-observing
1个回答
1
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.