Swift 3 NavigationController后退导致wkwebview进入错误的位置

时间:2016-12-23 15:00:27

标签: swift3 wkwebview

我有一个包含WKWebView的ViewController,视图在第一次加载时正确定位,但在移动到另一个视图后(我通过拦截来自WebView的链接打开另一个视图)并按下导航项(它会短暂出现在正确的位置,然后在导航栏后面的webview顶部重新加载,以便页面顶部被切断。

class HomeVC: BaseViewController, WKNavigationDelegate, WKUIDelegate {

var webView: WKWebView?

override func viewDidAppear(_ animated: Bool) {
    self.edgesForExtendedLayout = UIRectEdge.top;

    super.viewDidLoad()
    addSlideMenuButton()

    let screenSize: CGRect = UIScreen.main.bounds
    let frameRect: CGRect = CGRect(x: 0, y: 100, width: screenSize.width, height: screenSize.height)

    let url: NSURL = Bundle.main.url(forResource: "services", withExtension: "html")! as NSURL

    let requestObj: NSURLRequest = NSURLRequest(url: url as URL);

    self.webView = WKWebView(frame: frameRect)
    self.webView?.load(requestObj as URLRequest)
    self.webView?.navigationDelegate = self
    self.webView?.uiDelegate = self

    self.view = self.webView
}


override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    self.navigationItem.title = ""
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationItem.title = "SELECT A SERVICE"
}


func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
    let link: String = (webView.url?.absoluteString)!
    print(link)
    if(link == "file:///haircut") {
        print(link)
        self.openViewControllerBasedOnIdentifier("WebVC")
    }
}

我已经四处搜索,无法找到任何类似问题,也无法在代码中看到任何明显的问题。

1 个答案:

答案 0 :(得分:0)

您正在从super.viewDidLoad调用func viewDidAppear(),这可能会导致意外行为。因此,您的UIViewController子类将永远不会通知其超类,该视图已被加载。

override func viewDidAppear(_ animated: Bool) {
    // Do not do this before calling super!
    self.edgesForExtendedLayout = UIRectEdge.top;
    // You are calling the wrong the function for super
    // It should be super.viewDidAppear(animated)
    super.viewDidLoad()
    addSlideMenuButton()
    let screenSize: CGRect = UIScreen.main.bounds
    let frameRect: CGRect = CGRect(x: 0, y: 100, width: screenSize.width, height: screenSize.height)
    let url: NSURL = Bundle.main.url(forResource: "services", withExtension: "html")! as NSURL
    let requestObj: NSURLRequest = NSURLRequest(url: url as URL);
    self.webView = WKWebView(frame: frameRect)
    self.webView?.load(requestObj as URLRequest)
    self.webView?.navigationDelegate = self
    self.webView?.uiDelegate = self
    self.view = self.webView
}