gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:00:54 24 4
gpt4 key购买 nike

我正在使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com