Ich habe eine andere Lösung, die großartig funktioniert.
Einerseits funktioniert Ortwins Ansatz und Lösung nur mit iOS 6.0 und höher, aber unter iOS 5.0, 5.1 und 5.1.1 nicht richtig, und andererseits gibt es etwas, das ich nicht mag und nicht verstehen kann Bei Ortwins Ansatz wird die Methode [webView sizeThatFits:CGSizeZero]
mit dem Parameter verwendet CGSizeZero
: Wenn Sie die offizielle Dokumentation von Apple zu diesen Methoden und ihren Parametern lesen, heißt es deutlich:
Die Standardimplementierung dieser Methode gibt den Größenbereich des Begrenzungsrechtecks der Ansicht zurück. Unterklassen können diese Methode überschreiben, um einen benutzerdefinierten Wert basierend auf dem gewünschten Layout aller Unteransichten zurückzugeben. Beispielsweise gibt ein UISwitch-Objekt einen festen Größenwert zurück, der die Standardgröße einer Switch-Ansicht darstellt, und ein UIImageView-Objekt gibt die Größe des aktuell angezeigten Bildes zurück.
Was ich damit meine ist, dass es so ist, als wäre er ohne Logik auf seine Lösung gestoßen, denn beim Lesen der Dokumentation sollte der übergebene Parameter [webView sizeThatFits: ...]
zumindest den gewünschten haben width
. Bei seiner Lösung wird die gewünschte Breite auf den webView
Frame des Frames gesetzt, bevor sizeThatFits
mit einem CGSizeZero
Parameter aufgerufen wird. Ich behaupte also, dass diese Lösung "zufällig" auf iOS 6 funktioniert.
Ich stellte mir einen rationaleren Ansatz vor, der den Vorteil hat, für iOS 5.0 und höher zu arbeiten ... Und auch in komplexen Situationen, in denen mehr als ein WebView (mit seiner Eigenschaft webView.scrollView.scrollEnabled = NO
in a eingebettet ist) scrollView
.
Hier ist mein Code , um das Layout der zu zwingen , webView
auf den gewünschten width
und erhält die entsprechenden height
Satz zurück in die webView
selbst:
Obj-C
- (void)webViewDidFinishLoad:(UIWebView *)aWebView
{
aWebView.scrollView.scrollEnabled = NO; // Property available in iOS 5.0 and later
CGRect frame = aWebView.frame;
frame.size.width = 200; // Your desired width here.
frame.size.height = 1; // Set the height to a small one.
aWebView.frame = frame; // Set webView's Frame, forcing the Layout of its embedded scrollView with current Frame's constraints (Width set above).
frame.size.height = aWebView.scrollView.contentSize.height; // Get the corresponding height from the webView's embedded scrollView.
aWebView.frame = frame; // Set the scrollView contentHeight back to the frame itself.
}
Swift 4.x.
func webViewDidFinishLoad(_ aWebView: UIWebView) {
aWebView.scrollView.isScrollEnabled = false
var frame = aWebView.frame
frame.size.width = 200
frame.size.height = 1
aWebView.frame = frame
frame.size.height = aWebView.scrollView.contentSize.height
aWebView.frame = frame;
}
Beachten Sie, dass in meinem Beispiel das webView
in eine benutzerdefinierte scrollView
Datei mit anderen eingebettet war webViews
... Alle diese webViews
hatten ihre webView.scrollView.scrollEnabled = NO
, und der letzte Code, den ich hinzufügen musste, war die Berechnung height
der contentSize
von meiner benutzerdefinierten scrollView
Einbettung dieser webViews
, aber es war genauso einfach als Summieren meines webView
‚s frame.size.height
mit dem Trick berechnet wie oben beschrieben ...