UIWebView添加头部视图UIView

简介: 一开始是想到在用个scollview里面嵌入一个头部view,然后在头部view下面在嵌入一个webview。

方案一


一开始是想到在用个scollview里面嵌入一个头部view,然后在头部view下面在嵌入一个webview。


这样的话使得界面变得复杂、臃肿。这个页面是通过scollview来滚动的,所以我们要计算出webview实际内容有多高,我们不能通过一个链接就知道有多高吧,所以需要等webview加载完成之后才能知道具体内容高度


获取webview高度方法:

//    webview加载完成
    func webViewDidFinishLoad(_ webView: UIWebView) {
//        获取webView高度
//        方法1 // 记录高度,有时候计算的高度不准确
        let webViewHeight1 = webView.stringByEvaluatingJavaScript(from: "document.body.scrollHeight") ?? ""
        let webViewHeight2 = webView.stringByEvaluatingJavaScript(from: "document.body.offsetHeight") ?? ""
        let webViewHeight3 = webView.stringByEvaluatingJavaScript(from: "document.body.clientHeight") ?? ""
        print("方法1:\(webViewHeight1):\(webViewHeight2):\(webViewHeight3)")
//        方法2
        let webViewHeight4 = webView.scrollView.contentSize.height
        print("方法2:\(webViewHeight4)")
//        方法3
        let size = webView.sizeThatFits(CGSize.zero)
        print("方法3:\(size.height)")
//        方法4
        if webView.subviews.count > 0 {
            let scrollerView = webView.subviews[0];
            if scrollerView.subviews.count > 0 {
                let webDocView = scrollerView.subviews.last;
                let webViewHeight = webDocView!.frame.size.height;
                print("方法4\(webViewHeight)")
                if webDocView?.classForCoder == NSClassFromString("UIWebDocumentView") {
                    let webViewHeight = webDocView!.frame.size.height;
                    print("方法4\(webViewHeight)")
                    // 更新表上控件的frame
                    // _webView,时间控件,查看数,评论数...的frame,整个表头的frame,再来一句
                }
            }
        }
    }


获取完高度还要重新刷新高度


方案二


为何一定要把webview嵌套在scollview中呢,webview本身就有scollview啊,如果可以在webview中的scollview里面添加头部不是更好吗。


添加头部view


方法1


private func addHeaderView1() {
//        内容偏移height
        webView.scrollView.contentInset = UIEdgeInsetsMake(height, 0, 0, 0)
//        内容的初始位置-height
        webView.scrollView.contentOffset = CGPoint(x: 0, y: -height)
//        内容高度 = 原始高度 - height
        webView.scrollView.contentSize = CGSize(width: UIScreen.main.bounds.size.width, height: UIScreen.main.bounds.size.height-height)
//        添加头部
        let headerView = UIView(frame: CGRect(x: 0, y:-height, width: UIScreen.main.bounds.size.width, height: height))
        headerView.backgroundColor = UIColor.yellow
        self.webView.scrollView.addSubview(headerView)
    }


方法2


private func addHeaderView2() {
        let headerView = UIView(frame: CGRect(x: 0, y:0, width: UIScreen.main.bounds.size.width, height: height))
        headerView.backgroundColor = UIColor.yellow
        let browserCanvas = webView.bounds
        for subView in webView.scrollView.subviews {
            var subViewRect = subView.frame
            if(subViewRect.origin.x == browserCanvas.origin.x &&
                subViewRect.origin.y == browserCanvas.origin.y &&
                subViewRect.size.width == browserCanvas.size.width &&
                subViewRect.size.height == browserCanvas.size.height)
            {
                let height              = headerView.frame.size.height
            //        内容偏移height
                subViewRect.origin.y    = height
            //        内容高度 = 原始高度 - height
                subViewRect.size.height = subViewRect.size.height - height
//                重新设置高度
                subView.frame           = subViewRect
            }
        }
        webView.scrollView.addSubview(headerView)
        webView.scrollView.bringSubview(toFront: headerView)
    }



相关文章
|
2月前
|
Android开发 计算机视觉 iOS开发
多页面悬停控件和如何获得多UIWindow的页面UIWindow
多页面悬停控件和如何获得多UIWindow的页面UIWindow
24 1
|
2月前
|
iOS开发 容器
什么是 UINavigationController 和 UITabBarController?它们有什么作用?
什么是 UINavigationController 和 UITabBarController?它们有什么作用?
26 2
|
iOS开发
iOS 开发 - tableView内嵌scrollView时,在plus上滑动scrollView时和tableView有冲突
iOS 开发 - tableView内嵌scrollView时,在plus上滑动scrollView时和tableView有冲突
144 0
UIWebView 自适应高度
UIWebView 自适应高度
39 0
UIRefreshControl代码刷新
UIRefreshControl代码刷新
60 0
|
开发工具
UIView的clipsTobounds属性
UIView的clipsTobounds属性
101 0
UIView的clipsTobounds属性
|
Android开发 iOS开发 JavaScript
WKWebView代理方法解析
一.前言 上一篇文章已经对WKWebView做了一个简单的介绍,主要对它的一些方法和属性做了一个简单的介绍,今天看一下WKWebView的两个协议:WKNavigationDelegate 和 WKUIDelegate。
3209 0

热门文章

最新文章