grande soluzione da @joern. Funziona bene per me. Ho appena adattato il suo codice a swift 3.
Swift Code 3 Aggiornamento:
ho anche modificare stopObservingHeight per prevenire rimuovere osservatore prima che fosse creare.
import UIKit
var MyObservationContext = 0
class ViewController: UIViewController {
@IBOutlet weak var webview: UIWebView!
@IBOutlet weak var webviewHeightConstraint: NSLayoutConstraint!
var observing = false
override func viewDidLoad() {
super.viewDidLoad()
webview.scrollView.isScrollEnabled = false
webview.delegate = self
webview.loadRequest(NSURLRequest(URL: NSURL(string: "https://www.google.de/intl/de/policies/terms/regional.html")!))
}
deinit {
stopObservingHeight()
}
func startObservingHeight() {
let options = NSKeyValueObservingOptions([.new])
webview.scrollView.addObserver(self, forKeyPath: "contentSize", options: options, context: &MyObservationContext)
observing = true;
}
func stopObservingHeight() {
if observing {
webView.scrollView.removeObserver(self, forKeyPath: "contentSize", context: &MyObservationContext)
observing = false
}
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
guard let keyPath = keyPath,
let context = context else {
super.observeValue(forKeyPath: nil, of: object, change: change, context: nil)
return
}
switch (keyPath, context) {
case("contentSize", &MyObservationContext):
webviewHeightConstraint.constant = webview.scrollView.contentSize.height
default:
super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
}
}
}
extension ViewController: UIWebViewDelegate {
func webViewDidFinishLoad(_ webView: UIWebView) {
print(webView.request?.url ?? "nil")
webviewHeightConstraint.constant = webview.scrollView.contentSize.height
if (!observing) {
startObservingHeight()
}
}
}
Ehi! Ho visto la tua risposta quando l'hai pubblicata inizialmente, ma ho deciso di risolvere il problema quando lavoravo alla seconda versione della mia app. Grazie mille, ho solo provato a sistemare tutto e ha funzionato molto bene.Ho dovuto solo correggere alcuni valori di vincoli per compensare verticalmente la scrollView (dato che ho anche una barra di navigazione in alto, non è esattamente una superview vuota). Questa è la prima volta che uso il codice con gli osservatori, quindi dovrò esaminarlo più da vicino, ma per ora funziona! Grazie –
Grazie per il tuo feedback, sono contento che ti abbia aiutato. – joern
Grazie mille per questo – bitsoverflow