美文网首页
UIWebView添加头部视图UIView

UIWebView添加头部视图UIView

作者: 超级卡布达 | 来源:发表于2018-12-06 12:10 被阅读37次

方案一

一开始是想到在用个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)
    }

相关文章

网友评论

      本文标题:UIWebView添加头部视图UIView

      本文链接:https://www.haomeiwen.com/subject/erpncqtx.html