以编程方式添加WKWebView

3

我是iOS开发的初学者,最近在用代码添加WKWebview时遇到了困难。我想让它全屏显示,但是只能看到一个空白的屏幕。

var webView = WKWebView()
var activityIndicatorView: ActivityIndicatorView!

override func viewDidLoad() {
    super.viewDidLoad() 
     //show Activity Indicator
    self.activityIndicatorView = ActivityIndicatorView(title: "Loading content...", center: self.view.center)
    self.activityIndicatorView.startAnimating();
    self.view.addSubview(self.activityIndicatorView.getViewActivityIndicator())self.view.addSubview(self.activityIndicatorView.getViewActivityIndicator())
    // Do any additional setup after loading the view.
    let urlString = "http://www.youtube.com";
    let request = URLRequest(url:URL(string: urlString)!)
    self.webView.load(request)
     self.view = webView
}

添加约束条件。或者给它一个框架。 - Rakesha Shastri
在将webview分配给self.view时,您应该添加指示器或在webView中添加指示器视图。因为在这个过程中,self.view被替换为webview,而webview没有activityIndicatorView - Jatin Kathrotiya
3个回答

2
let webview = WKWebView()
    webview.frame  = CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 100)
    webview.load(URLRequest(url: Bundle.main.url(forResource: "index", withExtension:"html", subdirectory: "subdirectories")! as URL) as URLRequest)
    self.view.addSubview(webview)

1

Use like this:

lazy var webView: WKWebView = {
    let wv = WKWebView()
    wv.uiDelegate = self
    wv.navigationDelegate = self
    wv.translatesAutoresizingMaskIntoConstraints = false
    return wv
}()


override func viewDidLoad() {
    super.viewDidLoad()

    view.addSubview(webView)
    NSLayoutConstraint.activate([
        webView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
        webView.topAnchor.constraint(equalTo: view.topAnchor),
        webView.rightAnchor.constraint(equalTo: view.rightAnchor),
        webView.bottomAnchor.constraint(equalTo: view.bottomAnchor)])
}

0
你正在创建一个零框架的webView,这就是它没有显示出来的原因。
webView = WKWebView(frame: .zero) 更改为以下内容:
webView = WKWebView(frame: self.view.frame)

为了在加载页面时显示活动指示器,您需要实现WKNavigationDelegate代理。将您的代码更新为以下内容:
class ViewController: UIViewController, WKNavigationDelegate {
    var webView = WKWebView()
    var activityIndicatorView: ActivityIndicatorView!

    override func viewDidLoad() {
        super.viewDidLoad() 
         //show Activity Indicator
        self.activityIndicatorView = ActivityIndicatorView(title: "Loading content...", center: self.view.center)
        self.activityIndicatorView.startAnimating();
        self.view.addSubview(self.activityIndicatorView.getViewActivityIndicator())self.view.addSubview(self.activityIndicatorView.getViewActivityIndicator())
        // Do any additional setup after loading the view.
        let urlString = "http://www.youtube.com";
        let request = URLRequest(url:URL(string: urlString)!)
        self.webView.navigationDelegate = self // Add this line!
        self.webView.load(request)
    }

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        self.view = webView
        // Hide activity indicator here
    }
}

你的代码是可以运行的,但它会覆盖住我添加为子视图的活动指示器。 - bennycodest
@bennycodest 你的活动指示器框架是什么?请分享它的代码。你什么时候隐藏它? - M Reza
@bennycodest 我已经更新了答案。请注意,我已经在类声明中添加了“WKNavigationDelegate”,并在“viewDidLoad”中添加了“navigationDelegate”。 - M Reza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接