ios - 在一个 VC 上显示后重新设置 WKWebView

标签 ios swift caching wkwebview

我正在使用 WKWebView 作为应用程序中的中央文档对象,而不仅仅是作为 Web 的被动门户。同一个文档出现在应用程序的几个不同位置,因此理想情况下, View 将像基于 UIView 的原生 UIKit 一样高效地呈现。

为了避免 URL 加载延迟,我尝试的是集中缓存 View ,然后当发生导航转换并且新的父 View 自行构建时,它会从缓存中获取现有的 WKWebView 并添加它作为一个 subview ,这当然会从以前的 super View 中删除它。假设可以将它从之前的 super View 中删除,因为后者不再可见。

我注意到这有时有效,但大多数时候网页在其新层次结构中非常不满意——它似乎应用了随机缩放和平移,留下了巨大的空白,或者多次出现过大,或正确尺寸的一半。重新应用在原始 super View 中完美运行的相同程序化 NSLayoutConstraintsframe 的手动几何操作,setNeedsLayout() setNeedsDisplay() 在从新的父 VC 的生命周期方法调用时全部无效。

很明显,WKWebView 有很深的内部状态,我不知道如何重置才能让它在新家开心。这是不是找错人了?我应该依赖 HTTP 库级缓存吗?

目标是避免重新呈现包含 HTTP 事务、文档呈现算法和所有固有延迟的页面。毕竟它被计算过一次。我希望避免冗余计算和网络流量。

最佳答案

我也看到了。 将 WKWebView 从一个父级移动到另一个父级(导航 Controller 的 View )会导致内部 ScrollView contentInset 更新不正确(不遵守导航 Controller 的 automaticallyAdjustsScrollViewInsets = false)。

我所做的是对 WKWebView 进行子类化,并将这一点添加到类中:

override func layoutSubviews() {
    self.scrollView.contentInset = .zero
    super.layoutSubviews()
}

关于ios - 在一个 VC 上显示后重新设置 WKWebView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36845238/

相关文章:

iphone - 如果用户将符号链接(symbolic link)或别名拖到 iTunes 文件共享中该怎么办?

ios - 在 iPhoneX 上设置 UITabBarController 的 ViewControllers 会错放标签

Swift 使用 Struct 的 UnsafeMutablePointer 获取 String Error 的值

即使我设置了条件,Spring Cache也不会忽略Null键

node.js - yarn 缓存占用大量空间

ios - iOS 9.0.2 更新后的 App "Not Verified"

ios - 返回时,UICollectionView 垂直流不会使第一个单元格居中

arrays - swift 中的二维数组查找 - 类似于 excel 中的 vlookup

ios - 在 Cocoa Pods 中安装 smart、fhir 框架后 Apple Mach-O 链接器错误

php - PNG 图像输出的标题以确保它在浏览器中缓存?