Swift3 Swift 3导航控制器返回导致wkwebview移动到错误位置

Swift3 Swift 3导航控制器返回导致wkwebview移动到错误位置,swift3,wkwebview,Swift3,Wkwebview,我有一个包含WKWebView的ViewController,该视图在第一次加载时位置正确,但在移动到另一个视图(我通过截取WebView的链接打开另一个视图)并按下导航项(后退按钮)后,它会短暂地出现在正确的位置,然后使用导航栏后面的webview顶部重新加载,以便页面顶部被切断 class HomeVC: BaseViewController, WKNavigationDelegate, WKUIDelegate { var webView: WKWebView? override fu

我有一个包含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")
    }
}

我四处搜索,找不到任何类似的问题,也看不到代码中有任何明显的内容。

您正在调用
super.viewDidLoad
from
func viewdide()
,这会导致意外行为。因此,您的
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
}

更正了这两个错误,但不幸的是仍然遇到了相同的问题。我已将超类调用更改为
super.viewDidAppear(动画)
,并将代码的顶行移到下面。