UIWebView sizeToFit()更小

时间:2016-06-15 21:29:21

标签: ios swift uiwebview size sizetofit

似乎在sizeToFit()上使用UIWebView并不会将尺寸更改为更小,只会更大。这是一些设置代码:

var scrollView: UIScrollView!
var webView: UIWebView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    scrollView = UIScrollView()
    scrollView.frame = CGRect(x: 50.0, y: 50.0, width: 800.0, height: 1200.0)

    webView = UIWebView()
    webView.frame = CGRect(x: 50.0, y: 50.0, width: 800.0, height: 1.0)
    webView.scrollView.scrollEnabled = false
    webView.delegate = self
    webView.scalesPageToFit = false
    webView.loadHTMLString("Test", baseURL: nil)

    self.view.addSubview(scrollView)
    scrollView.addSubview(webView)
}

这是我的测试代码。它会在3秒后将内容的大小更改为非常大,然后在3秒后非常小:

    dispatch_after_delay_main(3) {

        self.webView.loadHTMLString("Test Test Test Test ", baseURL: nil)
        // Much longer string abbreviated here

        dispatch_after_delay_main(3, block: {

            self.webView.loadHTMLString("Test", baseURL: nil)

        })
    }

在加载HTML后调用此方法。目标是根据内容的大小更改webView的大小。注意:我使用.sizeToFit()和sizeThatFits()完成了相同大小的结果。

func webViewDidFinishLoad(webView: UIWebView) {

    webView.frame.size.height = 0.0 // Just in case
    webView.sizeToFit()

}

我在webViewDidFinishLoad(webView: UIWebView)的末尾省略了print语句,但它们输出的大小正在增长,但并未减少。换句话说,它会增长,但加载"Test"后,它的大小不会减小。

(800.0, 1.0)  // "Test" (before sizeToFit() called)
(800.0, 1976.0) // "Test Test .... Test "
(800.0, 1976.0) // "Test"

1 个答案:

答案 0 :(得分:3)

你需要在scrollView上嵌入webview吗?我想不是。

尝试将HTML字符串更改为"<div id='main-html'>Your text</div>",然后在webViewDidFinishLoad委托功能上执行以下操作:

首先,您获得内容高度:

var result : Float = NSString (webView.stringByEvaluatingJavaScriptFromString("document.getElementById('main-html').offsetHeight").floatValue

其次,使用结果值更改webview高度。

并尝试使用相同的结果值更改webView.scrollView.contentSize的高度。

最后,使用webView.sizeToFit()

干杯

修改

正如你所说,你可以使用:

func webViewDidFinishLoad(webView: UIWebView) {

    webView.frame.size.height = 1.0 // Value needs to be > 0.0 and < of the current height
    webView.sizeToFit()

}