Bagaimana saya bisa mengaktifkan zoom in di UIWebView yang ada di dalam UIScrollView?

132

Saya memiliki UIWebViewyang di dalam UIScrollView(scrollview berisi komponen lain)

Saya mencoba mengaktifkan multitouch baik pada Interface Builder atau Programmatic on UIWebViewtetapi masih tidak dapat memperbesar untuk html, apakah saya harus menangani kedua zoom in pada UIScrollViewdan UIWebView? Atau sesuatu yang belum saya atur?

calendarw
sumber
2
scalesPageToFit = YESberfungsi tetapi itu mengubah ukuran konten default Anda, Lihat jawaban saya ini akan membantu Anda.
iPatel

Jawaban:

348

Anda HARUS mengatur scalesPageToFit = YA untuk menjepit dan memperbesar untuk bekerja pada UIWebView

john geshrick
sumber
2
Ini bagus, kecuali sekarang halaman saya sedang diperkecil agar sesuai dengan tampilan. Saya membuat halaman html dalam kode untuk ditampilkan, dan saya ingin itu tetap pada ukuran sebelumnya, tetapi memungkinkan pengguna saya untuk memperbesar dengan pinch zooming
Dan F
33
Tambahkan tag meta berikut ke kepala dokumen HTML Anda: <meta name = 'viewport' content = 'skala awal = 1.0, skala maksimum = 10.0' />
vocaro
2
Bagaimana saya bisa melakukan hal yang sama dengan situs web eksternal? Yaitu, saya mengatur zoom awal, dan zooming pengguna diaktifkan setelah itu.
William Jockusch
Hai, Semuanya berfungsi dengan baik Paging, ZoomIn / Out, dll ... Tapi saya punya satu masalah di dalamnya. Aplikasi saya bekerja di kedua orientasi (Potret & Lansekap). Sekarang, dalam potret, saya harus menggesek halaman 2-3 kali maka saya bisa pergi ke halaman berikutnya. Namun dalam lanskap, ini berfungsi dengan baik. Saya telah mengambil tampilan web di dalam scrollview dan scrollview memiliki halaman. Tetapi ketika saya mencoba menggeser gulir untuk pergi ke halaman berikutnya, maka saya harus menggesernya 2 hingga 3 kali untuk pergi ke halaman berikutnya (dalam mode potret). Ada ide tentang hal yang sama. Terima kasih untuk bantuannya.
Nishant B
jawaban yang sempurna ... Terima kasih
AL̲̳I
12

OK, Anda perlu melakukan keduanya di atas, tetapi juga yang berikut ini. Saya memiliki tampilan web di tampilan utama, dan itu tidak berhasil.

  1. Seperti di atas, Anda pertama-tama harus meletakkan UIScrollView di tampilan utama, lalu meletakkan tampilan web di tampilan gulir.
  2. Seperti di atas, terapkan <UIScrollViewDelegate>dalam view controller Anda, seret delegasi tampilan gulir ke view controller di Interface Builder, dan terapkan viewForZoomingInScrollViewmetode ini. Ini harus mengembalikan pointer ke UIScrollView (return myScrollView).
  3. Saya membuat properti IBOutlet untuk tampilan web dan tampilan gulir - tautkan di NIB ke pengontrol tampilan Anda.
  4. Pada Tampilan Gulir, buka Inspektur Atribut, atur faktor zoom Maks dan Min Anda (saya atur 0,5 hingga 5,0, yang bekerja dengan baik).
  5. Di Tampilan Web, di Inspektur Atribut:
  6. Di bagian Tampilan Web, pilih Timbangan Halaman Agar Sesuai
  7. Di bagian Tampilan, pilih Mode, "Kiri Atas"
  8. Di bagian Lihat di bagian bawah, centang Interaksi Pengguna Diaktifkan, dan Beberapa Sentuhan Diaktifkan
Jay Imerman
sumber
3

Dengan JavaScript Anda dapat mengontrol level zoom, meskipun solusi oly yang saya temukan tidak terlihat mulus.

Katakanlah Anda ada di <head>:

<meta id="vp" name="viewport" content="width=768,initial-scale=1.0">

Untuk memperbesar hingga 4x, dan masih memungkinkan pengguna untuk mengubah zoom, ubah konten dua kali:

var vp = document.getElementById('vp');
vp.content = "width=767,minimum-scale=4.0,maximum-scale=4.0,user-scalable=yes";
vp.content = "width=768,minimum-scale=0.25,maximum-scale=10.0,user-scalable=yes";

Beralih lebar sangat penting - jika tidak, Mobile Safari memiliki bug pengecatan ulang yang serius (karena optimasi yang berlebihan).

Anda tidak bisa hanya mengatur initial-scalelagi - ini diabaikan untuk kedua kalinya.

Robocat
sumber