このコードはAppleホームページをロードすることになっていますが、代わりに空白の画面を表示します。
これは、HTTP URLと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)
}
}
「App Transport Security Settings」を変更して、任意のロードを許可しようとしました。何も変更しませんでした。
スクリーンショット:
ビュー階層:
シミュレーターのSafariデバッグコンソール:
私は解決策を見つけました。この問題の原因はAVG AntiVirusのwebshieldです。何らかの理由でAVG webshieldはシミュレータからのすべてのネットワーク通信を不正として扱います。 www.Apple.comは安全ではない、または他のWebサイトではないという。
次のスクリーンショットは、webkitのエラーを示すsystem.logからのものです。
この問題を再現するには、AVGアンチウイルスをインストールし、Webシールドをオンにします。アプリのWKWebview(シミュレーター上)は何もロードしません。
実際のデバイスで動作しなかった理由がわかりません。デバイスの別の問題である可能性があります。派生データフォルダー、実際のアプリも削除し、デバイスを再起動しました。
みなさん、答えてくれてありがとう。
自動レイアウトとすべてのデバイスの定数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>
次のコードは、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")!))
}
}
結果は次のとおりです。
コードは正常に機能しています
//
// ViewController.Swift
// StackOverflow
//
// Created by Vivek Kumar on 5/11/18.
// Copyright © 2018 Vivek. All rights reserved.
//
import UIKit
import WebKit
class ViewController: 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)
}
これを生成し、
以下のコードを試すことができます
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")!))
}
}
}
出力