2016-07-14 18 views
0

Ich habe das WKWebView in einer Zelle, aber das Problem ist, wenn das Telefon gedreht, bekomme ich den alten Wert der WkWebView Scroll Höhe, aus diesem Grund der Inhalt nicht ' t laden vollständig.WKWebView den alten Wert Scroll Höhe nach dem Drehen des Telefons iOS9

Diese Methode ändert die Höhe der Zeile der Tabellenzelle, aber der Wert, den ich bekomme, ist vorher um zu rotieren.

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
{ 
    if indexPath.row == 3{ 
     return contentHeights[indexPath.row] 
    }else{ 
     contentHeights[indexPath.row] = UITableViewAutomaticDimension 
     return contentHeights[indexPath.row] 
    } 


} 
func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
    if indexPath.row == 3{ 
     return contentHeights[indexPath.row] 
    }else{ 
     return UITableViewAutomaticDimension 
    } 
} 

Die Zeile 3 ist das WkWebView Any Help ???

Antwort

0

Ich las mehrere Post danach gründete ich zwei Wege, um das Problem zu lösen.

Zuerst habe ich KVO

addObserver(self, forKeyPath: "webView.scrollView.contentSize", options: .New, context: nil) 

override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) { 
if keyPath == "webView.scrollView.contentSize" { 
    if let nsSize = change[NSKeyValueChangeNewKey] as? NSValue { 
     let height = nsSize.CGSizeValue().height 
     // Do something here using content height. 
    } 
}} 

removeObserver(self, forKeyPath: "webView.scrollView.contentSize", context: nil) 

Der zweite Weg ist ein Ereignis auf Javascript:

Fügen Sie den folgenden Code Code HTML:

<script>$(document).ready(function(){$(document).resize(function() {webkit.messageHandlers.callbackHandler.postMessage($(document).height())});});</script> 

Fügen Sie den WkWebView die folgende Konfiguration:

var contentController:WKUserContentController! 
override func loadView() { 
    super.loadView() 
    contentController = WKUserContentController() 
    contentController.addScriptMessageHandler(
     self, 
     name: "callbackHandler" 
    ) 

    config = WKWebViewConfiguration() 
    config.userContentController = contentController 
    self.webView = WKWebView(frame: CGRectMake(0, 0, self.view.frame.width, self.view.frame.height), configuration: config) 
} 

Fügen Sie die folgende Funktion:

func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) { 
    if(message.name == "callbackHandler") { 
     if !positionOrientationLanscape{ 
      sizeLanscape = CGFloat((message.body as! NSNumber).doubleValue) 
      contentHeights[4] = sizeLanscape 
     }else{ 
      sizePortrait = CGFloat((message.body as! NSNumber).doubleValue) 
      contentHeights[4] = sizePortrait 
     } 
    }  
} 

deinit

deinit { 

     self.contentController.removeScriptMessageHandlerForName("callbackHandler") 
    } 
Nicht vergessen