如何正确地将 WKWebView 嵌入自定义 UIView 中?
How to embed WKWebView inside custom UIView properly?
在我的项目中,我有一个视图控制器,我想在其中显示嵌入另一个名为 viewForEmbeddingWebView 的 UIView 中的 WKWebView,它是我在故事板中创建的(图片上为灰色)。
我已经在我的ViewController中实现了这个逻辑:
import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate {
var webView: WKWebView!
@IBOutlet weak var viewForEmbeddingWebView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
webView = WKWebView(frame: viewForEmbeddingWebView.frame, configuration: WKWebViewConfiguration() )
self.viewForEmbeddingWebView.addSubview(webView)
self.webView.allowsBackForwardNavigationGestures = true
let myURL = URL(string: "https://www.apple.com")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
}
在模拟器中的 build 和 运行 之后,我看到以下内容:
它显示了 WKWebView 但边界看起来不对(首先:它不适合 viewForEmbeddingWebView 的边界,其次:顶部有一个白色间隙)。我读到我必须在苹果网站 https://developer.apple.com/reference/webkit/wkwebview 上使用 WKWebView,但他们的例子不是我的情况,因为他们只展示了如何处理在 ViewController 的整个视图中加载 WKWebView 的情况。但是我需要将它嵌入到另一个视图中,因为稍后我还需要另一个 ui 围绕这个 WKWebView。在WKWebView之前有WebView,但是自从iOS8出现之后我们就必须使用WKWebView了。请帮忙,因为我检查了很多材料,但没有找到与 Swift 3 和 Xcode 8.
一起工作的答案
我正在使用 Xcode 8 和 Swift 3 以及 iOS 10.2。
您想像这样初始化 WKWebView
(Swift 3.0):
webView = WKWebView(frame: viewForEmbeddingWebView.bounds, configuration: WKWebViewConfiguration())
webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.viewForEmbeddingWebView.addSubview(webView)
WKWebView Swift 5 或自定义 WKWebView(Webview 已弃用)
请按照下面的苹果 link for WKWebView -
https://developer.apple.com/documentation/webkit/wkwebview
如果你想在自定义视图中添加WKWebView。请遵守守则。
import WebKit
class OpenControllerURL: UIViewController,WKNavigationDelegate , WKUIDelegate {
@IBOutlet weak var CustomView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://developer.apple.com/documentation/webkit/wkwebview"!)
let request = URLRequest(url: url!)
let webView = WKWebView(frame: self.CustomView.frame)
webView.autoresizingMask = [.flexibleWidth, .flexibleHeight] //It assigns Custom View height and width
webView.navigationDelegate = self
webView.load(request)
self.CustomView.addSubview(webView)
}
#Happy Coding!!!
在我的项目中,我有一个视图控制器,我想在其中显示嵌入另一个名为 viewForEmbeddingWebView 的 UIView 中的 WKWebView,它是我在故事板中创建的(图片上为灰色)。
我已经在我的ViewController中实现了这个逻辑:
import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate {
var webView: WKWebView!
@IBOutlet weak var viewForEmbeddingWebView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
webView = WKWebView(frame: viewForEmbeddingWebView.frame, configuration: WKWebViewConfiguration() )
self.viewForEmbeddingWebView.addSubview(webView)
self.webView.allowsBackForwardNavigationGestures = true
let myURL = URL(string: "https://www.apple.com")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
}
在模拟器中的 build 和 运行 之后,我看到以下内容:
它显示了 WKWebView 但边界看起来不对(首先:它不适合 viewForEmbeddingWebView 的边界,其次:顶部有一个白色间隙)。我读到我必须在苹果网站 https://developer.apple.com/reference/webkit/wkwebview 上使用 WKWebView,但他们的例子不是我的情况,因为他们只展示了如何处理在 ViewController 的整个视图中加载 WKWebView 的情况。但是我需要将它嵌入到另一个视图中,因为稍后我还需要另一个 ui 围绕这个 WKWebView。在WKWebView之前有WebView,但是自从iOS8出现之后我们就必须使用WKWebView了。请帮忙,因为我检查了很多材料,但没有找到与 Swift 3 和 Xcode 8.
一起工作的答案我正在使用 Xcode 8 和 Swift 3 以及 iOS 10.2。
您想像这样初始化 WKWebView
(Swift 3.0):
webView = WKWebView(frame: viewForEmbeddingWebView.bounds, configuration: WKWebViewConfiguration())
webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
self.viewForEmbeddingWebView.addSubview(webView)
WKWebView Swift 5 或自定义 WKWebView(Webview 已弃用) 请按照下面的苹果 link for WKWebView - https://developer.apple.com/documentation/webkit/wkwebview
如果你想在自定义视图中添加WKWebView。请遵守守则。
import WebKit
class OpenControllerURL: UIViewController,WKNavigationDelegate , WKUIDelegate {
@IBOutlet weak var CustomView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "https://developer.apple.com/documentation/webkit/wkwebview"!)
let request = URLRequest(url: url!)
let webView = WKWebView(frame: self.CustomView.frame)
webView.autoresizingMask = [.flexibleWidth, .flexibleHeight] //It assigns Custom View height and width
webView.navigationDelegate = self
webView.load(request)
self.CustomView.addSubview(webView)
}
#Happy Coding!!!