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 webView
bingkai sebelum memanggil sizeThatFits
dengan CGSizeZero
parameter. 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 = NO
tertanam dalam file scrollView
.
Berikut adalah kode saya untuk memaksa Layout webView
ke yang diinginkan width
dan mendapatkan height
set yang sesuai kembali ke webView
dirinya 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, webView
itu tertanam dalam kebiasaan yang scrollView
memiliki webViews
... Semua ini webViews
memiliki mereka webView.scrollView.scrollEnabled = NO
, dan bagian terakhir dari kode yang harus saya tambahkan adalah perhitungan dari height
dari embedding contentSize
khusus saya scrollView
ini webViews
, tetapi itu semudah sebagai menjumlahkan saya webView
's frame.size.height
dihitung dengan trik yang dijelaskan di atas ...