Saya memiliki solusi lain yang berfungsi dengan baik.
Di satu sisi, pendekatan & solusi Ortwin hanya berfungsi dengan iOS 6.0 dan yang lebih baru, tetapi gagal berfungsi dengan benar di iOS 5.0, 5.1 dan 5.1.1, dan di sisi lain ada sesuatu yang saya tidak suka dan tidak dapat mengerti. dengan pendekatan Ortwin, itu adalah penggunaan metode [webView sizeThatFits:CGSizeZero]dengan parameter CGSizeZero: Jika Anda membaca dokumentasi Resmi Apple tentang metode ini dan parameternya, dikatakan dengan jelas:
Implementasi default metode ini mengembalikan porsi ukuran persegi panjang batas tampilan. Subclass dapat mengganti metode ini untuk mengembalikan nilai kustom berdasarkan tata letak yang diinginkan dari setiap subview. Misalnya, objek UISwitch mengembalikan nilai ukuran tetap yang mewakili ukuran standar tampilan sakelar, dan objek UIImageView mengembalikan ukuran gambar yang sedang ditampilkan.
Yang saya maksud adalah sepertinya dia menemukan solusinya tanpa logika apa pun, karena membaca dokumentasi, parameter yang diteruskan [webView sizeThatFits: ...]setidaknya harus memiliki yang diinginkan width. Dengan solusinya, lebar yang diinginkan diatur ke webViewbingkai sebelum memanggil sizeThatFitsdengan CGSizeZeroparameter. Jadi saya mempertahankan solusi ini berfungsi di iOS 6 secara "kebetulan".
Saya membayangkan pendekatan yang lebih rasional, yang memiliki keuntungan bekerja untuk iOS 5.0 dan yang lebih baru ... Dan juga dalam situasi kompleks di mana lebih dari satu webView (Dengan propertinya webView.scrollView.scrollEnabled = NOtertanam dalam file scrollView.
Berikut adalah kode saya untuk memaksa Layout webViewke yang diinginkan widthdan mendapatkan heightset yang sesuai kembali ke webViewdirinya sendiri:
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.
}
Cepat 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;
}
Perhatikan bahwa dalam contoh saya, webViewitu tertanam dalam kebiasaan yang scrollViewmemiliki webViews... Semua ini webViewsmemiliki mereka webView.scrollView.scrollEnabled = NO, dan bagian terakhir dari kode yang harus saya tambahkan adalah perhitungan dari heightdari embedding contentSizekhusus saya scrollViewini webViews, tetapi itu semudah sebagai menjumlahkan saya webView's frame.size.heightdihitung dengan trik yang dijelaskan di atas ...