获取 WKWebView 中静态页面的最终渲染高度

2024-01-08

在我的应用程序中,我使用的是WKWebView它加载带有静态内容的网页。

我想知道 的高度contentSize一旦网页完全呈现在WKWebView.

所以我想我可以使用webView:didFinishNavigation:代表:

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate, WKUIDelegate {

    @IBOutlet weak var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        webView.navigationDelegate = self
        webView.uiDelegate = self

        webView.load(URLRequest(url: URL(string: "https://www.rockade.nl/testpage/testpage.php")!))
    }

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        print("finished loading: height=\(webView.scrollView.contentSize.height)")
    }

}

我对这段代码的问题是,这个委托在页面完全渲染之前被调用,所以我得到了不同的高度结果,甚至是 0 值。

当我添加一点延迟时,我得到了正确的结果,但这感觉就像是黑客攻击。

使用这样的观察者

var myContext = 0
webView.scrollView.addObserver(self, forKeyPath: "contentSize", options: .new, context: &myContext)

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
        if context == &myContext {
            print(webView.scrollView.contentSize.height)
        } else {
            super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
        }
    }
}

对我也没有帮助,因为我确实需要确保收到的值是最终高度。

很高兴知道:我无法控制网页,因此不能选择使用 javascript。

我希望有人能指出我正确的方向!


所以你无法控制网页,但 html dom 不会在页面之间发生变化。因此,您可以使用脚本来获取页面的高度。

也许这对你有帮助:

        func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        webView.evaluateJavaScript("document.readyState", completionHandler: { (complete, error) in
            if complete != nil {
                webView.evaluateJavaScript("document.body.scrollHeight", completionHandler: { (height, error) in
                    // Here is your height
                })
            }
        })
    }

PS:您也可以尝试使用“document.body.offsetHeight”代替滚动高度。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取 WKWebView 中静态页面的最终渲染高度 的相关文章

  • 如何在按回车键时以编程方式关闭 iOS 键盘

    我创建了一个UITextField以编程方式制作UITextFieldviewController 的属性 我需要通过回车和触摸屏幕来关闭键盘 我能够让屏幕触摸关闭 但按回车键不起作用 我已经了解了如何使用故事板以及通过分配和初始化来做到这
  • 检测 UICollectionView 中的页面更改

    我尝试寻找这个问题一段时间 但找不到这个问题的答案 我的问题是我有一个UICollectionView滚动方向是Horizontal with Paging Enabled 我的问题是我想保留用户所在的当前页码 所以我创建了一个int变量
  • iPhone 和服务器上的 3DES 加密不同

    我有以下代码用于加密发送到服务器的请求 服务器上的解码由 NET 完成 在 iPhone 上 我使用带有以下代码的安全框架 NSString doCipher NSString plainText CCOperation encryptOr
  • 将 println 输出格式化为表格

    Like 这个Java问题 https stackoverflow com questions 1358512 java println formatting so i can display a table 但是对于斯威夫特来说 我怎样才
  • SQLite。无法添加超过 1000 行

    我试图向我的 SQLite 数据库 使用 fmdb 添加 10k 行 但写入在 1000 行处停止 我没有任何错误或警告 我的代码 NSString queryString NSString stringWithFormat insert
  • 检查 coredata 对象是否为零

    我想找出核心数据中的对象 我的代码 Types signedDate Date alarmDate Date starTime 国家标准日期 endTime NSDate NSString str signedDate gt AND sig
  • 如何在 viewDidLayoutSubviews 中获得正确的视图高度?

    void viewDidLayoutSubviews super viewDidLayoutSubviews NSLog viewDidLayoutSubviews view height f self view frame size he
  • 错误 ITMS-90171:“无效的捆绑结构 不允许使用二进制文件 APP.app/libswiftRemoteMirror.dylib

    我打算将 sift 2 2 转换为 swfit 3 0 并上传到 itunes 商店 然后出现一个错误 我对这个错误感到非常厌倦 错误 ITMS 90171 无效的捆绑包结构 不允许使用二进制文件 ideaPitch app libswif
  • 如何在 iOS 上使用 PhoneGap 检测是否拨打电话

    在 iOS 上使用电话提示意图时 例如 window location telprompt phoneNumber 系统会提示用户拨打该号码或取消 有没有办法知道用户执行了这两个操作中的哪一个 查看 PhoneGap 文档 startcal
  • 如何将 UIView 从右上角设置动画/旋转 90 度?

    我花了几个小时试图找到一种方法来将 UIView 从右上角设置动画 旋转 90 度 效果几乎应该像屏幕顶部的旋转门一样 希望有人可以帮忙 因此 在我按下回车键后 我突然将两个和两个放在一起 并认为节拍器样本的工作方式有点像一扇旋转门 这让我
  • iOS心率检测算法

    我正在尝试在我正在开发的应用程序中实现心跳记录功能 首选方法是使用 iPhone 的摄像头 在灯亮的情况下 让用户将手指放在镜头上 然后检测视频源中与用户心脏相对应的波动 我通过以下堆栈溢出问题找到了一个非常好的起点here https s
  • Nativescript:如何以编程方式禁用/启用 ScrollView 滚动?

    有没有办法以编程方式禁用 启用 NativeScript 中的 ScrollView 滚动 好的 我找到了该怎么做 在 iOS 上这实际上非常简单 var scrollView page getViewById YOUR VIEW ID s
  • OS X Server - 机器人无法从存储库获取源代码

    我安装了以前版本的 OS X Server 并且运行良好 但是当我安装升级到 3 2 1 时 我发现我的机器人都无法正常工作 这些是我在每次尝试集成时遇到的问题 构建服务错误无法将数据放入缓冲区 1 构建服务警告由于找不到工作副本 源代码管
  • 从字符串初始化单元

    我正在寻找一个Unit symbol String 一种初始化程序认出 不定义符号 这是一个代码片段 通过提供来说明我的问题有限解 to it 尽管下面的解决方案有效 但明确列出了基础框架如果 Apple 在即将推出的 iOS 更新中发布新
  • 如何更改 iOS 13 中 UISegmentedControl 中分段的颜色?

    A UISegmentedControliOS 13 中具有新的外观 并且用于更改分段控件颜色的现有代码不再像以前那样工作 在 iOS 13 之前 您可以设置tintColor这将用于分段控件周围的边框 分段之间的线条以及所选分段的背景颜色
  • iOS 音频修剪

    我搜索了很多 找不到任何相关的东西 我正在处理 iOS 音频文件 这就是我想做的 录制音频并保存剪辑 已检查 我使用AVAudioRecorder 改变音高 已检查 是用狄拉克做的吗 修剪 我有两个标记 即开始和结束偏移 并使用此信息我想修
  • UIButton 分组按钮

    我正在尝试创建一个完全像这样设置的按钮 我该怎么做 有人可以给我看代码吗 有没有办法像这样对 UIButton 进行 分组 你会想要使用一个UITableViewController部分设置为UITableViewStyleGrouped
  • 二元运算符“==”不能应用于“UILabel?”类型的操作数和“字符串”

    错误 二元运算符 无法应用于 UILabel 类型的操作数和 字符串 import UIKit class ViewController UIViewController let Soft 5 let Medium 8 let Hard 1
  • iOS 中如何将阴影变成圆形?

    我创建了一个圆形 UIView 它也应该有一个阴影 到目前为止 一切正常 但在角落 阴影没有正确倒圆 如何将阴影角变圆 这是代码和屏幕截图 popupView layer cornerRadius 15 popupView layer sh
  • iOS OpenGL ES 2.0:离屏渲染并将结果保存到 UIImage

    我正在使用 OpenGL ES 渲染一些特殊效果 我不想向用户显示这些效果 我只想将结果保存为 UIImage 有人可以帮助我吗 这是我正在使用的代码 我可以获得一个包含我使用的红色透明颜色的图像 但没有显示几何图形 import Rend

随机推荐

  • SwiftUI 禁用列表边框 iOS 14 [重复]

    这个问题在这里已经有答案了 我发现如果视图包含 navigationView SwiftUI iOS 14 中的列表将具有类似边框的内容 有什么解决办法可以禁用边框吗 因为边框破坏了我的应用程序的设计 这是代码中不包含 Navigation
  • Laravel 队列被“杀死”

    有时 当我将大型数据集发送到作业时 我的队列工作人员会突然退出 taskmetas is an array with other arrays each subsequent array having 90 properties this
  • 为什么trickle 实用程序不会影响我的动态链接golang 程序?

    我有一个 golang 程序 可以通过 https 将大量数据上传到 OpenStack 对象存储 它依赖于golang标准库 net http 做这项工作 我想用trickle https linux die net man 1 tric
  • 如何在express中为静态文件设置动态路由

    目前 为了提供静态文件 我正在执行以下操作 app use express static dirname public then i start the server http createServer app listen port fu
  • Swift 中的 GCDAsyncSocket

    我想使用基于 ELM327 芯片的 OBD 加密狗打开 TCP 连接 所以我决定使用GCDAsyncSocket库 我写了这段代码 import UIKit import CocoaAsyncSocket class ViewControl
  • JavaScript 如何通过单击和拖动动态移动 Div

    好吧 看起来应该很简单 我需要获取一个已经存在的 div 并根据窗口内的鼠标位置移动它 我到处搜索 这导致我以过于复杂的方式做同样的事情 并且涉及到 j query 的使用 我需要严格使用 javascript 来完成我想做的事情 Meth
  • pyqt 按钮自动绑定到 on...click 函数,无需 connect 或 pyqtSlot

    我已经使用 pyqt5 和 qt designer 几个星期了 我习惯使用 connect 语句将信号连接到处理函数 昨天我编写了一段代码 它还自动将按钮单击信号连接到处理函数 而无需 pyqtSlot 装饰器 将单击的信号连接到函数会导致
  • 缺少 JavaFX 应用程序类

    我有这样的java代码 package mypackage import javafx application Application import javafx stage Stage public class MyApp extends
  • 创建函数App时出现“该区域不允许进行缩放操作”的错误

    我正在运行构建中的各个步骤Azure 中的无服务器 Web 应用程序 https learn microsoft com en us azure functions tutorial static website serverless ap
  • gzip/deflate 失败时抛出异常

    我在 ASP NET MVC 3 中的 gzip deflate ActionFilterAttribute 中遇到了一个有趣的问题 如果我的应用程序抛出异常 我不会得到 YSOD 而是得到一整页的乱码 如下所示 I m J J t iG
  • 如何删除网格布局小部件内的所有小部件并以相同的顺序重新创建所有小部件

    这是我之前的问题的延续 如何从左上角开始将小部件添加到网格布局 谢谢X Jacobs解决 tat 问题 现在我想删除所有这些小部件并以相同的顺序重新创建相同的小部件 就像刷新小部件库一样 谢谢 好的 这是我的 ui 当我单击 createP
  • 如何从包名称中获取应用程序的图标?

    我尝试了堆栈溢出的各种解决方案 但没有成功 我想要的是 我知道不同应用程序的包名称 我想从这些包名称中获取应用程序图标 在图像视图中显示这些图标 例如我有一个包名com example testnotification 如何获取此应用程序图
  • jQuery 单击停止传播

    我有一个简单的设置 一个表格 其单元格内有复选框 我有两个事件 一个事件响应单击复选框 另一个事件响应单击 tr 元素 当我单击复选框时 我不希望触发表行事件 我试过了event stopPropagation and return fal
  • 文本框的实时绑定属性更改[重复]

    这个问题在这里已经有答案了 我有一个TextBox控件绑定到我的视图模型中的属性 当前行为的工作方式是视图模型只会收到通知 其中的文本TextBox控件失去焦点后进行修改 每当TextBox实时改变状态 它附加到我的视图模型中的一个属性 用
  • 如何将键值对附加到 iPhone 上的 UIView?

    当我开始 iPhone 开发时 我在某处读到可以将键值对附加到 UIView 我知道所有 UIView 都可以用作字典来存储您可能想要附加到它们的任何数据 以防止不必要的子类化 然而 我到处寻找参考 并尝试自己实现该行为 但徒劳无功 我尝试
  • PowerMockito - 如何将whenNew()与类型化列表一起使用?

    我希望 PowerMockito 返回我的空数组列表Foos when new ArrayList
  • 根据 UIBezierPath 移动 UIView [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 I ve a UI贝塞尔路径画这个 我希望红点在蓝色路径上无限移动 从右到左 从左到右 我怎样才能做到这一点 您可以使用CAKeyFr
  • 我应该选择 IEnumerable 还是数组? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在我从事的许多项目中 每当我必须返回只读集合时 我都会使用IEnumerable
  • HTML 表单提交按钮的字体大小无法更改

    如何增加提交按钮的字体大小 特别是在 Chrome 中 它太小并且文本看起来被压扁 工作小提琴 http jsfiddle net xhf4bLnd body input font size 30px 我知道有 webkit appeara
  • 获取 WKWebView 中静态页面的最终渲染高度

    在我的应用程序中 我使用的是WKWebView它加载带有静态内容的网页 我想知道 的高度contentSize一旦网页完全呈现在WKWebView 所以我想我可以使用webView didFinishNavigation 代表 import