EDIT:
per ottenere il miglior calcolo dell'altezza possibile, alla fine ho fatto un paio di cose per ottenere la migliore altezza:
- ho impostato la dimensione del WebView essere molto grande e quindi caricare il contenuto.
- Una volta caricato il contenuto (notifica KVO) Ridimensiono la vista utilizzando il metodo seguente.
- Quindi eseguo la funzione di dimensione di nuovo e ottengo una nuova dimensione e ridimensiono nuovamente la vista.
Quanto sopra ha ottenuto i risultati più accurati per me.
ORIGINALE:
Ho provato il KVO vista di scorrimento e ho provato valutando javascript sul documento, utilizzando clientHeight
, offsetHeight
, ecc ...
Quello che ha funzionato per me alla fine è : document.body.scrollHeight
. Oppure usa scrollHeight
del tuo elemento più in alto, ad es. un container div
.
ascolto la loading
WKWebview modifiche alle proprietà utilizzando KVO:
[webview addObserver: self forKeyPath: NSStringFromSelector(@selector(loading)) options: NSKeyValueObservingOptionNew context: nil];
E poi:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
if(object == self.webview && [keyPath isEqualToString: NSStringFromSelector(@selector(loading))]) {
NSNumber *newValue = change[NSKeyValueChangeNewKey];
if(![newValue boolValue]) {
[self updateWebviewFrame];
}
}
}
Il updateWebviewFrame
implementazione:
[self.webview evaluateJavaScript: @"document.body.scrollHeight" completionHandler: ^(id response, NSError *error) {
CGRect frame = self.webview.frame;
frame.size.height = [response floatValue];
self.webview.frame = frame;
}];
WKWebView ha - evaluateJavaScript: completionHandler: invece . È il metodo UIWebView asincrono online. Dovrai modificare il tuo codice di conseguenza. – zambrey
Ciao, trovi qualche soluzione per questo problema? Grazie, –