ios – 使用自动布局将UIWebView作为其内容的高度

发布时间:2020-06-03 发布网站:脚本之家
价值2580元廖雪峰前端视频终终终于免费啦!
脚本之家收集整理的这篇文章主要介绍了ios – 使用自动布局将UIWebView作为其内容的高度脚本之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经在一个滚动视图中嵌入了一个网页视图,我希望网页视图被“扩展”,以显示所有的内容,然后我想滚动浏览滚动视图.

我使用滚动视图作为超级视图的原因,而不仅仅是将网页视图用作滚动视图是因为我在滚动过程中要包含在Web视图上方的标签(请参阅屏幕截图).

那么如何使webview自动调整大小,因此它占用了显示其包含的内容所需的所有空间.

之后,如何使超级视图(滚动视图)根据网络视图的大小自行调整大小?

解决方法

要做这项工作,您必须执行以下步骤:

>将UIWebView从nib连接到视图控制器中的插座
>禁用在Web视图中滚动
>在UIScrollView上设置约束,UIView在Web视图的顶部(在我的示例中,我省略了该视图中的所有标签)和UIWebView.
>将UIWebView的高度约束连接到视图控制器中的插座.
>将视图控制器设置为UIWebViewDelegate
>在webViewDidFinishLoad中,将height约束的常量设置为Web视图中滚动视图的contentSize的高度.
>开始键值观察contentSize以更改高度,当网页视图的高度必须更改时,因为网页的各个部分在不重新加载页面的情况下更改其大小(如分页符或菜单).

我不会详细解释这些限制,因为你似乎已经把自己弄清楚了.这是一个限制的截图:

所以,这里是代码:

import UIKit

var MyObservationContext = 0

class ViewController: UIViewController {

    @IBOutlet weak var webview: UIWebView!
    @IBOutlet weak var webviewHeightConstraint: NSLayoutConstraint!
    var observing = false

    override func viewDidLoad() {
        super.viewDidLoad()
        webview.scrollView.scrollEnabled = false
        webview.delegate = self
        webview.loadRequest(NSURLRequest(URL: NSURL(string: "https://www.google.de/intl/de/policies/terms/regional.html")!))
    }

    deinit {
        stopObservingHeight()
    }

    func startObservingHeight() {
        let options = NSKeyValueObservingOptions([.New])
        webview.scrollView.addObserver(self,forKeyPath: "contentSize",options: options,context: &MyObservationContext)
        observing = true;
    }

    func stopObservingHeight() {
        webview.scrollView.removeObserver(self,context: &MyObservationContext)
        observing = false
    }

    override func observeValueForKeyPath(keyPath: String?,ofObject object: AnyObject?,change: [String : AnyObject]?,context: UnsafeMutablePointer<Void>) {
        guard let keyPath = keyPath else {
            super.observeValueForKeyPath(nil,ofObject: object,change: change,context: context)
            return
        }
        switch (keyPath,context) {
        case("contentSize",&MyObservationContext):
            webviewHeightConstraint.constant = webview.scrollView.contentSize.height
        default:
            super.observeValueForKeyPath(keyPath,context: context)
        }
    }
}

extension ViewController: UIWebViewDelegate {
    func webViewDidFinishLoad(webView: UIWebView) {
        print(webView.request?.URL)
        webviewHeightConstraint.constant = webview.scrollView.contentSize.height
        if (!observing) {
            startObservingHeight()
        }
    }
}

总结

以上是脚本之家为你收集整理的ios – 使用自动布局将UIWebView作为其内容的高度全部内容,希望文章能够帮你解决ios – 使用自动布局将UIWebView作为其内容的高度所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入脚本之家官方QQ群:1065694478