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