2016-06-26 10 views
6

Zaczynam od prostej aplikacji, która pokazuje widok WWW za pomocą WKWebView. Wszystko buduje i działa poprawnie, z tym że zawsze jest w trybie pełnoekranowym. Najlepiej byłoby, gdyby nie rozciągał się pod paskiem stanu na iOS u góry. Należy go obniżyć o 20 pikseli, aby znajdował się pod nim. Mam obszerne wyszukiwanie rozwiązania, ale nic nie zmienia rozmiaru. Nic nie jest skonfigurowane w InterfaceBuilder, robię wszystko programowo. Używanie Swift.Próba utworzenia programowego iOS WKWebView o rozmiarze mniejszym niż ekran

Wydaje się to być czymś prostym, co zrobi wiele aplikacji z WKWebView. To powinno być proste. Prawdopodobnie brakuje mi czegoś oczywistego. Każda pomoc jest doceniana. Z góry dziękuję.

To, co mam tak daleko:

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

Dziękujemy Emilio !! Poprawiony kod działa idealnie!

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

Odpowiedz

3

Twój problem polega na tym UIViewControllers prezentowane w określony sposób będzie zarządzać klatkę ich zdaniem. Jeśli zaprezentujesz go modalnie, na przykład jako kontroler główny lub pasek nawigacyjny, ręczne ustawienie nazwy nie będzie miało żadnego efektu. (To tylko kilka przykładów).

Jeśli chcesz zarządzać ramką widoku, możesz dodać webView jako podzbiór do kontrolera widoku view. Modyfikowanie jego ramki będzie wtedy działało.

Jedno chciałbym podkreślić to, że wywołanie self.view.frame = webView.frame po wywołaniu self.view = webView jest zbędny, ponieważ są one zarówno samego obiektu, więc to, co robi jest skutecznie:

self.view.frame = self.view.frame 
Powiązane problemy