ios - KVO - UIScrollView.contentSize 误报?

标签 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))

输出:(由滚动生成)

内容大小 (1366.0, 2061.0) 内容大小 (1366.0, 2061.0) 内容大小 (1366.0, 2061.0) 内容大小 (1366.0, 2061.0)

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

最佳答案

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

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

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

除非一个类被记录为支持 KVO,否则您应该假设它不支持(即使它看起来可以工作)。它可能在一个版本的 iOS 中有效,而在下一个版本中无效...

关于ios - KVO - UIScrollView.contentSize 误报?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49084845/

相关文章:

ios - SwiftUI 中的双向无限 PageView

ios - if#available(iOS 9, *) 不起作用

ios - ScrollView 将内容移出 View

objective-c - transitionFromView 和索引

javascript - 如何将 fullcalender 数据导出为 iCal 格式?

iphone - uiwebview(iphone)上的自定义按钮

iOS - 通过 Macbook 从 iPhone 调试 WKWebView 和/或 UIWebView

ios - SecPKCS12Import when p12 requires an empty passphrase

objective-c - UIScrollView subview 中的 UITapGestureRecognizer

swift - 当 UIView 的动态标签足够小时,在 ScrollView 中垂直居中,但一旦它们不够小,就将其对齐到顶部