Ios WKWebView未加载网页-在Swift中呈现空白屏幕

Ios WKWebView未加载网页-在Swift中呈现空白屏幕,ios,swift,wkwebview,Ios,Swift,Wkwebview,这段代码本应加载苹果主页,但却显示一个空白屏幕。 HTTP和HTTPS URL都会发生这种情况 代码: import UIKit import WebKit class WebViewController: UIViewController, WKUIDelegate{ var webView: WKWebView! override func loadView() { let webConfiguration = WKWebViewConfiguratio

这段代码本应加载苹果主页,但却显示一个空白屏幕。 HTTP和HTTPS URL都会发生这种情况

代码:

import UIKit
import WebKit

class WebViewController: UIViewController, WKUIDelegate{

    var webView: WKWebView!

    override func loadView() {
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        view = webView

    }
    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .red

        let myURL = URL(string: "https://www.apple.com")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
    }
}
我已尝试更改“应用程序传输安全设置”以允许任意加载。没有改变任何事情

截图:

视图层次结构:

模拟器的Safari调试控制台:

你可以试试下面的代码

import UIKit
import WebKit

class WebViewController: UIViewController {

var wkWebview: WKWebView!

 override func viewDidLoad() {

   super.viewDidLoad()

    var Ycord : CGFloat = 0.0 // for top space 
    if UIScreen.main.bounds.height == 812 { //Check for iPhone-x
        Ycord = 44.0
    }
    else {
        Ycord = 20.0
    }

    let frame = CGRect(x: 0.0, y: Ycord, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height-Ycord)

    self.wkWebview = WKWebView(frame: frame, configuration: WKWebViewConfiguration())
    self.wkWebview.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    self.wkWebview.uiDelegate = self
    self.view.addSubview(self.wkWebview)

    DispatchQueue.main.async {

        self.wkWebview.load(URLRequest(url:URL(string: "https://www.apple.com")!))
    }        
 }
}
输出


在Xcode 9.3中,以下代码对我来说很好:

import UIKit
import WebKit

class ViewController: UIViewController {

    var webView: WKWebView!

    override func loadView() {
        webView = WKWebView(frame: .zero, configuration: WKWebViewConfiguration())
        self.view = webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        webView.load(URLRequest(url: URL(string: "https://www.apple.com")!))
    }

}
结果如下:


我找到了解决办法。问题是由AVG AntiVirus的webshield引起的。出于某种原因,AVG webshield将来自模拟器的所有网络通信视为欺诈。 下面的屏幕截图显示了在模拟器上运行的safari应用程序。它说www.apple.com或任何其他网站都不安全

以下屏幕截图来自system.log,显示webkit的错误

您可以通过安装AVG antivirus并打开webshield来复制此问题。在您的应用程序中,模拟器不会加载任何内容

我不明白为什么它在实际设备上不起作用。这可能是该设备的另一个问题。我还删除了衍生数据文件夹,即实际的应用程序,并重新启动了设备

谢谢大家的回答和帮助

为Mac构建应用程序? 如果您正在为Mac构建应用程序,请确保在目标中打开应用程序沙盒,并勾选网络传出连接

更新:如果您更喜欢长途旅行,请将以下内容添加到您的AppName.Rights


所有设备的自动布局和恒定10的正确方式:

import UIKit
import WebKit

class ViewController: UIViewController, WKUIDelegate {

let webView = WKWebView()

override func viewDidLoad() {
    super.viewDidLoad()
    setupWebView()
}

fileprivate func setupWebView() {
    webView.uiDelegate = self
    webView.translatesAutoresizingMaskIntoConstraints = false
    DispatchQueue.main.async {
        guard let url = URL(string: "http://www.apple.com") else { return }
        self.webView.load(URLRequest(url: url))
    }
    view.addSubview(webView)
    webView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 10).isActive = true
    webView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 10).isActive = true
    webView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -10).isActive = true
    webView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: 10).isActive = true
}}
在info.plist中:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>


您的代码运行良好。我在演示中试过了。我想这可能是另一个问题。我的应用程序中没有使用任何情节提要文件。全部代码。什么时候调用loadView?是在viewDidLoad之前还是之后?我没有看到它在任何地方被调用,而这就是你实际创建网络视图的地方是的,代码来自苹果网站,但我不知道为什么我不能让它工作。这是我第一次使用WKWebView.Yes。正如你所做的那样,它工作得很好。只在一个演示中尝试此代码。请现在尝试我更改了一些代码。希望它仍能正常工作,伙计。我已经测试了上面的代码,它对我有效。附上截图。请尝试上面的代码使用此代码,我在导航栏下面看到一个黑色的条带,下面是一个空白的白色屏幕。我将在我的问题中添加一个屏幕截图。这很奇怪,但对我来说它仍然是一个空白的白色屏幕。@ShrikantChidgopkar您尝试过使用其他URL吗?是的。我尝试了几个不同的网站,使用http、https和www@ShrikantChidgopkar尝试使用WKWebView的isLoading属性进行调试。是AVG antivirus的Webshield导致了此问题。伙计,你太棒了,等了2天,没有你的代码片段就没有完整的解决方案。谢谢你,伙计。非常感谢,我只是在这上面浪费了半个小时,最疯狂的是,当不允许传出连接时,甚至webView.loadHTMLString也会失败,非常感谢!你救了我一天,搞定了!真该死!
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>