加载HTML字符串时,UIWebView保持空白

时间:2017-05-09 15:55:44

标签: ios swift uiwebview

我的应用中有UIWebView,我尝试使用loadHTMLString(_:, baseURL:)加载存储在应用中String的HTML。 Web视图始终显示为没有内容的纯灰色矩形。如果我将HTML字符串保存到文件并在Mac上的Safari中加载,页面将按预期呈现。

我想也许是关于HTML的东西,所以我把它缩小到最小的测试,得到了相同的结果:

let myHTMLString = "<html><head></head><body><p>This is a test</p></body></html>"
myWebView.loadHTMLString(myHTMLString, baseURL: nil)

仍为灰色矩形。

我在这里浏览了其他答案,以检查并验证各种可能相关的细节:

  • 允许任意负载无效。并不是说它应该对我上面的测试用例产生影响,但是有些人遇到了问题。
  • 我已经使用Safari远程调试UIWebView。所有内容都在那里,它在iOS应用程序中不可见。
  • 从Safari调试时显示的大小与我使用Xcode的视图调试器时看到的大小相符。 Web视图可见,Safari显示它的大小合适。
  • 我已实施UIWebView委托方法并设置委托属性。我接到webViewDidStartLoad(_:)webViewDidFinishLoad(_:)webView(_:shouldStartLoadWith:navigationType:)的电话,在最后一种情况下,我总是返回true。没有报告错误 - 我从未得到webView(_:didFailLoadWithError:)
  • 如果我更改UIWebView的背景颜色,我会得到不同颜色的矩形,但我仍然无法获得任何可见的网页内容。

我错过了什么?这应该是一个微不足道的案例,但我没有可见的内容。

3 个答案:

答案 0 :(得分:1)

您收到的错误很奇怪,但您是否已尝试为baseURL参数设置值?类似于:URL(string: "www.google.com")

答案 1 :(得分:1)

尝试一个新的,空的UIViewController,只需将其作为代码:

import UIKit

class TestViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let newWebView = UIWebView(frame: CGRect(x: 8, y: 8, width: 300, height: 400))
        self.view.addSubview(newWebView)

        // cyan background html
        let myHTMLString = "<html><head></head><body bgcolor=#00ffff><p>This is a test</p></body></html>"
        newWebView.loadHTMLString(myHTMLString, baseURL: nil)
    }

}

答案 2 :(得分:1)

在调查并尝试新项目(受@ DonMag答案的启发)之后,问题似乎是UIWebView中包含UIStackView。虽然网页视图的尺寸是正确的,但这会以某种方式阻止它呈现内容。我在一个简单的测试项目中试过这个并且行为结束了 - 一个普通的UIWebView本身就可以正常工作,但是堆栈视图中包含的内容并不会呈现其内容,即使它的大小是正确的。

我不知道为什么会这样,或者我是否可以使用这个技巧让网页视图在堆栈视图中正常工作。但原因很清楚,如果不是原因。