【问题标题】:UIWebView sizeToFit() SmallerUIWebView sizeToFit() 更小
【发布时间】:2016-06-15 21:29:21
【问题描述】:

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

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 秒后将内容的大小更改为 VERY LARGE,然后在 3 秒后更改为 VERY SMALL:

    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) 末尾的打印语句,但它们输出的大小会增加,但不会减少。换句话说,它会增长,但是一旦加载了"Test",它的大小就不会减小。

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

【问题讨论】:

    标签: ios swift uiwebview size sizetofit


    【解决方案1】:

    您需要嵌入在滚动视图中的 web 视图吗?我认为不会。

    尝试将您的 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()
    
    }
    

    【讨论】:

    • 按这个时候的要求去做,是的,我确实需要嵌入它。我有一个非常大的标题(UIView),下面有一个 webView。在小型设备上,用户查看 webView 信息的唯一方法是将 header 和 webView 嵌入到同一个 scrollView 中。
    • 这确实让我找到了问题所在。问题在于我使用的是 webView.frame.size.height = 0.0 ,由于某种原因,它不允许 webView 调整为更小。如果我使用 1.0(或者我假设不是 0.0)它工作正常! :) 如果您想编辑您的答案或提交第二个包含该信息的答案,我会接受它
    • 但是您只需要使用webView.frame.size.height = 1.0 就可以解决您的问题吗?
    • 只要设置为一个值> 0并且
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 2012-04-12
    • 2014-11-19
    • 1970-01-01
    • 2013-11-06
    相关资源
    最近更新 更多