2016-06-26 29 views
6

Im partire da una semplice app che mostra solo una visualizzazione Web utilizzando WKWebView. Tutto crea e funziona bene, tranne che è sempre a schermo intero. Idealmente non si estenderebbe sotto la barra di stato di iOS in alto. Deve essere abbassato di 20px per essere sotto di esso. Ho cercato estesamente per una soluzione, ma nulla cambia le dimensioni. Niente è configurato in InterfaceBuilder, sto facendo tutto a livello di codice. Utilizzando Swift.Provare a creare un WKWebView iOS con una dimensione inferiore allo schermo a livello di programmazione

Questo sembra qualcosa di semplice che molte applicazioni con WKWebView farebbero. Dovrebbe essere semplice Probabilmente mi manca qualcosa di ovvio. Qualsiasi aiuto è apprezzato. Grazie in anticipo.

Questo è quello che ho finora:

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

Molte grazie Emilio !! Il codice corretto funziona perfettamente!

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

risposta

3

tuo problema è che UIViewControllers presentato in un certo modo gestiranno la cornice del loro punto di vista. Se lo si presenta in modo modale, come il controller di root o in una barra di navigazione, ad esempio, l'impostazione della fama manualmente non avrà alcun effetto. (Questi sono solo alcuni esempi).

Se si desidera gestire il frame della vista, è possibile aggiungere webView come sottoview a view del controller di visualizzazione. La modifica della sua cornice funzionerà allora.

Una cosa che vorrei sottolineare è che chiamando self.view.frame = webView.frame dopo aver chiamato self.view = webView è ridondante, perché sono entrambi lo stesso oggetto, così che cosa si sta effettivamente facendo è:

self.view.frame = self.view.frame