尝试以编程方式创建尺寸小于屏幕的iOS WKWebView

Edd*_*die 9 ios swift wkwebview

我从一个简单的应用程序开始,该应用程序只显示使用WKWebView的Web视图.一切都建立起来,并且工作正常,除了它总是全屏.理想情况下,它不会在顶部的iOS状态栏下扩展.它需要降低20px才能低于它.我已经广泛搜索了一个解决方案,但没有改变大小.在InterfaceBuilder中没有设置任何东西,我正在以编程方式完成所有工作.使用Swift.

这似乎是许多使用WKWebView的应用程序所做的基本功能.应该很简单.我可能错过了一些明显的东西.任何帮助表示赞赏.提前致谢.

这是我到目前为止:

import UIKit
import WebKit
class ViewController: UIViewController, UIGestureRecognizerDelegate , UIWebViewDelegate, WKNavigationDelegate  {

    let url = NSURL(string:"http://stackoverflow.com")
    var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()
        webView = WKWebView(frame: CGRect( x: 0, y: 20, width: 380, height: 150 ), configuration: WKWebViewConfiguration() )
        self.view = webView
        self.view.frame = webView.frame
        let req = NSURLRequest(URL:url!)
        webView.loadRequest(req)
        self.webView.allowsBackForwardNavigationGestures = true
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}
Run Code Online (Sandbox Code Playgroud)

非常感谢Emilio !! 调整后的代码完美无缺!

import UIKit
import WebKit
class ViewController: UIViewController, UIGestureRecognizerDelegate , UIWebViewDelegate, WKNavigationDelegate  {

    let url = NSURL(string:"http://stackoverflow.com")
    var webView: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()
        webView = WKWebView(frame: CGRect( x: 0, y: 20, width: self.view.frame.width, height: self.view.frame.height - 20 ), configuration: WKWebViewConfiguration() )
        self.view.addSubview(webView)
         let req = NSURLRequest(URL:url!)
        webView.loadRequest(req)
        self.webView.allowsBackForwardNavigationGestures = true
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}
Run Code Online (Sandbox Code Playgroud)

Emi*_*aez 4

你的问题是,UIViewControllers以某种方式呈现会管理他们的观点框架。例如,如果您以模态方式将其呈现为根控制器或在导航栏中,则手动设置名气不会产生任何效果。(这些只是几个例子)。

如果您想管理视图的框架,您可以将webView作为子视图添加到视图控制器的view. 修改它的框架就可以了。

我想指出的一件事是,self.view.frame = webView.frame调用后调用self.view = webView是多余的,因为它们都是同一个对象,所以您实际上要做的是:

self.view.frame = self.view.frame
Run Code Online (Sandbox Code Playgroud)