2016-06-26 8 views
6

Ich beginne mit einer einfachen App, die nur eine Webansicht mit WKWebView zeigt. Alles baut, und funktioniert in Ordnung, außer dass es immer Vollbild ist. Im Idealfall würde es sich nicht unter der iOS-Statusleiste an der Spitze erstrecken. Es muss um 20px gesenkt werden, um darunter zu sein. Ich habe ausgiebig nach einer Lösung gesucht, aber nichts ändert die Größe. In InterfaceBuilder ist nichts eingerichtet, ich mache alles programmgesteuert. Mit Swift.Versuchen, ein iOS WKWebView mit einer Größe kleiner als der Bildschirm programmgesteuert zu erstellen

Das scheint etwas Grundlegendes zu sein, das viele Apps mit einem WKWebView tun würden. Es sollte einfach sein. Vermutlich vermisse ich etwas Offensichtliches. Jede Hilfe wird geschätzt. Danke im Voraus. Diese

ist das, was ich bisher:

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. 
    } 
} 

Vielen Dank Emilio !! Der eingestellte Code funktioniert einwandfrei!

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. 
    } 
} 

Antwort

3

Ihr Problem ist, dass UIViewControllers in gewisser Weise präsentiert wird den Rahmen ihrer Ansicht verwalten. Wenn Sie es beispielsweise als Root-Controller oder in einer Navigationsleiste präsentieren, hat die manuelle Einstellung des Ruhmes keine Auswirkungen. (Das sind nur ein paar Beispiele).

Wenn Sie den Rahmen der Ansicht verwalten möchten, können Sie die webView als Unteransicht zum view Ihres Ansichtscontrollers hinzufügen. Das Ändern seines Rahmens funktioniert dann.

Eine Sache möchte ich darauf hinweisen, dass self.view.frame = webView.frame Aufruf nach dem Aufruf von self.view = webView überflüssig ist, weil sie beide das gleiche Objekt sind, also was Sie effektiv tun, ist:

self.view.frame = self.view.frame