swiftui加载的webview根据内容自动计算高度

352 阅读1分钟

现在有一个需求,就是一个页面中包含了网页,但是网页内容只是页面内容的一部分。因此要设置webview的高度为内容高度。这样的话网页作为整个页面的一部分,跟随整体的scollview进行滑动。

那么就需要动态获取webview的高度,并动态更新。

大模型给的方法是在前端之中调用一个api。

function updateHeight() {

 window.webkit.messageHandlers.heightObserver.postMessage(document.body.scrollHeight);

}

// 监听内容变化

window.addEventListener('resize', updateHeight);

// 图片加载完成后更新高度

document.addEventListener('DOMContentLoaded', function() {

    // 等待所有图片加载完成

    var imgs = document.getElementsByTagName('img');

    var loaded = 0;

    for(var i = 0; i < imgs.length; i++) {

        if(imgs[i].complete) {

            loaded++;

        } else {

            imgs[i].addEventListener('load', function() {

                loaded++;

                if(loaded == imgs.length) {

                    updateHeight();

                }

            });

        }

    }

    // 如果没有图片或所有图片已加载,直接更新高度

    if(imgs.length == 0 || loaded == imgs.length) {

        updateHeight();

    }

});

监听了所有图片的加载,然后在图片加载完成之后调用一个更新回调,通知客户端,客户端进行刷新高度

image.png

在回调回来的时候刷新高度

image.png

image.png