2016-12-23 2 views
0

WKWebView가 포함 된 ViewController가 있는데 뷰가 처음로드 될 때 올바르게 배치되지만 다른 뷰로 이동 한 후 (링크를 가로 채서 다른 뷰를 여는 중입니다. 탐색 항목 (뒤로 버튼)을 누르면 해당 위치에 잠깐 나타납니다. 그런 다음 탐색 막대 뒤의 웹보기 맨 위에 다시로드되어 페이지 상단이 잘립니다.Swift 3 NavigationController segue back을 사용하면 wkwebview가 잘못된 위치로 이동합니다.

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") 
    } 
} 

나는 비슷한 문제를 찾을 수 없으며 코드에서 명백한 것을 볼 수 없습니다.

답변

0

예기치 않은 동작이 발생할 수있는 func viewDidAppear()에서 super.viewDidLoad을 호출했습니다. 따라서 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 
} 
+0

2 가지 실수를 수정했지만 여전히 불행히도 같은 문제가 발생합니다. – joe642

+0

슈퍼 클래스 호출을'super.viewDidAppear (animated)'로 변경했고 아래 코드의 맨 위 줄을 아래로 옮겼습니다. – joe642

관련 문제