ฉันจะเปิดใช้งานการซูมเข้าบน UIWebView ซึ่งอยู่ใน UIScrollView ได้อย่างไร


132

ฉันมีสิ่งUIWebViewที่อยู่ภายในUIScrollView(scrollview มีส่วนประกอบอื่น)

ฉันพยายามที่จะเปิดใช้งานมัลติทัชทั้งในInterface BuilderหรือโปรแกรมบนUIWebViewแต่ก็ยังไม่สามารถซูมสำหรับ HTML, ฉันจะต้องจัดการทั้งซูมเข้าที่UIScrollViewและUIWebView? หรืออะไรที่ฉันไม่ได้ตั้งค่า?


2
scalesPageToFit = YESใช้งานได้ แต่เปลี่ยนขนาดเนื้อหาเริ่มต้นของคุณดูคำตอบของฉันสิ่งนี้จะเป็นประโยชน์สำหรับคุณ
iPatel

คำตอบ:


348

คุณต้องตั้งค่า scalePageToFit = ใช่สำหรับการบีบและซูมเพื่อทำงานบน UIWebView


2
นี่เป็นสิ่งที่ดียกเว้นตอนนี้เพจของฉันกำลังถูกลดขนาดให้พอดีกับมุมมอง ฉันกำลังสร้างหน้า html ในโค้ดเพื่อแสดงและฉันต้องการให้มันยังคงเป็นขนาดก่อนหน้านี้ แต่อนุญาตให้ผู้ใช้ของฉันซูมเข้าด้วยการซูมด้วยนิ้ว
Dan F

33
เพิ่มเมตาแท็กต่อไปนี้ในส่วนหัวของเอกสาร HTML ของคุณ: <meta name = 'viewport' content = 'initial-scale = 1.0, maximum-scale = 10.0' />
vocaro

2
ฉันจะทำสิ่งเดียวกันกับเว็บไซต์ภายนอกได้อย่างไร นั่นคือฉันตั้งค่าการซูมเริ่มต้นและเปิดใช้งานการซูมของผู้ใช้หลังจากนั้น
William Jockusch

สวัสดีทุกอย่างทำงานได้ดี Paging, ZoomIn / Out ฯลฯ ... แต่ฉันมีปัญหาหนึ่งในนั้น แอปของฉันทำงานทั้งในแนวตั้ง (แนวตั้งและแนวนอน) ตอนนี้ในแนวตั้งฉันต้องปัดหน้า 2-3 ครั้งจึงจะไปหน้าถัดไปได้ แต่ในแนวนอนมันใช้งานได้ดี ฉันใช้ webview ภายใน scrollview และ scrollview มีเพจจิ้ง แต่เมื่อฉันพยายามปัดแถบเลื่อนเพื่อไปที่หน้าถัดไปฉันต้องปัดมัน 2 ถึง 3 ครั้งเพื่อไปที่หน้าถัดไป (ในโหมดแนวตั้ง) ความคิดใด ๆ เกี่ยวกับเรื่องเดียวกัน ขอบคุณสำหรับความช่วยเหลือ
Nishant B

คำตอบที่สมบูรณ์แบบ ... ขอบคุณ
AL̲̳I

12

ตกลงคุณต้องทำทั้งสองอย่างข้างต้น แต่ยังรวมถึงสิ่งต่อไปนี้ด้วย ฉันมีมุมมองเว็บในมุมมองหลักและไม่ได้ผล

  1. ข้างต้นคุณต้องใส่ UIScrollView ในมุมมองหลักก่อนจากนั้นจึงใส่มุมมองเว็บในมุมมองแบบเลื่อน
  2. ข้างต้นนำไปใช้<UIScrollViewDelegate>ในตัวควบคุมมุมมองของคุณลากผู้รับมอบสิทธิ์มุมมองเลื่อนไปยังตัวควบคุมมุมมองในตัวสร้างส่วนต่อประสานและใช้viewForZoomingInScrollViewวิธีการ สิ่งนี้จะต้องส่งกลับตัวชี้ไปที่ UIScrollView (ส่งคืน myScrollView)
  3. ฉันสร้างคุณสมบัติ IBOutlet สำหรับทั้งมุมมองเว็บและมุมมองแบบเลื่อน - เชื่อมโยงคุณสมบัติเหล่านี้ใน NIB กับตัวควบคุมมุมมองของคุณ
  4. ในมุมมองเลื่อนไปที่ตัวตรวจสอบคุณสมบัติตั้งค่าปัจจัยการซูมสูงสุดและต่ำสุดของคุณ (ฉันตั้งค่า 0.5 ถึง 5.0 ซึ่งใช้ได้ดี)
  5. บน Web View ใน Attributes Inspector:
  6. ในส่วน Web View เลือก Scales Pages To Fit
  7. ในส่วนมุมมองให้เลือกโหมด "ซ้ายบน"
  8. ในส่วนมุมมองที่ด้านล่างให้ทำเครื่องหมายที่เปิดใช้งานการโต้ตอบของผู้ใช้และเปิดใช้งานการสัมผัสหลายครั้ง

3

ด้วย JavaScript คุณสามารถควบคุมระดับการซูมแม้ว่าโซลูชัน oly ที่ฉันพบจะดูไม่ราบรื่น

สมมติว่าคุณมีใน<head>:

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

หากต้องการซูมเป็น 4x และยังคงอนุญาตให้ผู้ใช้เปลี่ยนการซูมได้ให้เปลี่ยนเนื้อหาสองครั้ง:

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";

การสลับความกว้างเป็นสิ่งสำคัญมากมิฉะนั้น Mobile Safari จะมีจุดบกพร่องที่ร้ายแรงในการทาสีซ้ำ (เนื่องจากการเพิ่มประสิทธิภาพมากเกินไป)

คุณไม่สามารถตั้งค่าได้initial-scaleอีกครั้ง - จะถูกละเว้นในครั้งที่สอง


2

คุณต้องใช้เมธอด viewForZoomingInScrollView ในคอนโทรลเลอร์ของคุณมิฉะนั้นการซูมจะไม่ทำอะไรเลย (ฉันไม่รู้จริงๆว่าทำไมถึงจำเป็น แต่คุณไปแล้ว)

สำหรับรายละเอียดโปรดดูhttp://developer.apple.com/iphone/library/documentation/WindowsViews/Conceptual/UIScrollView_pg/ZoomZoom/ZoomZoom.html

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.