2011-11-08 15 views
14

क्या उपर्युक्त सभी करना संभव है? इसलिए मुझे प्रारंभिक ज़ूम स्केल here सेट करने का एक शानदार तरीका दिया गया है।UIWebView - बाहरी वेबसाइट लोड करें, प्रोग्रामेटिक रूप से शुरुआती ज़ूम स्केल सेट करें, और उपयोगकर्ता को बाद में ज़ूम करने दें

[webView stringByEvaluatingJavaScriptFromString: @"document.body.style.zoom = 5.0;"]; 

लेकिन क्या मैं अब भी ऐसा नहीं कर सकते उपयोगकर्ता ज़ूम पैमाने को बदलने के लिए के बाद कार्यक्रम शुरू में यह सेट अनुमति देते हैं: अर्थात्, मेरे webViewDidFinishLoad विधि में निम्न पंक्ति शामिल करने के लिए। यदि मैं स्केलपेज टॉफिट को NO पर सेट करता हूं, तो उपयोगकर्ता ज़ूम स्केल नहीं बदल सकता है। और यदि मैं YES को स्केलपेज्सफ़ोइट सेट करता हूं, तो यह मेरे प्रोग्रामेटिक ज़ूम को ओवरराइड करता है।

क्या कोई मदद कर सकता है?

संपादित करें: प्रतिक्रिया के लिए धन्यवाद। लेकिन अगर मैं scrollView ज़ूम करता हूं, तो चीजें थोड़ा धुंधला होती हैं।

उत्तर

39

आप जोड़ सकते हैं या इस लक्ष्य को हासिल करने के लिए एक <meta name='viewport' टैग संशोधित कर सकते हैं। मेटा/व्यूपोर्ट टैग यहाँ पर एप्पल प्रलेखन:

https://developer.apple.com/library/content/documentation/AppleApplications/Reference/SafariHTMLRef/Articles/MetaTags.html

यहाँ टैग जोड़ने का एक उदाहरण एक बार दस्तावेज़ भरी हुई है है:

- (void) webViewDidFinishLoad:(UIWebView *)webView 
{ 
    NSString* js = 
    @"var meta = document.createElement('meta'); " \ 
    "meta.setAttribute('name', 'viewport'); " \ 
    "meta.setAttribute('content', 'width = device-width, initial-scale = 5.0, user-scalable = yes'); " \ 
    "document.getElementsByTagName('head')[0].appendChild(meta)"; 

    [webView stringByEvaluatingJavaScriptFromString: js];   
} 

वेब पेज आप लोड कर रहे हैं प्रदान करता है तो एक मौजूदा मेटा टैग को आपको DOM में नया मेटा तत्व जोड़ने का प्रयास करने के बजाय इसे संशोधित करने की आवश्यकता हो सकती है। यह तो सवाल यह तकनीक की चर्चा:

Can I change the viewport meta tag in mobile safari on the fly?

अपने परीक्षण ऐप्लिकेशन में मैं हां में UIWebViewscalesPageToFit निर्धारित किया है।

+0

चाहिए फिर से स्थापित करने से पहले भी स्पष्ट व्यूपोर्ट गुण: [WebView stringByEvaluatingJavaScriptFromString: @ "$ ('मेटा [नाम = व्यूपोर्ट]') को हटाने();।"]; – Vlad

+0

बस उस तथ्य के साथ चिपकाना कि आपको पिछली स्लैश (\) की आवश्यकता नहीं है जब एकाधिक लाइनों पर जेएस स्ट्रिंग को फैलाते हैं। उद्धरण चिह्न (") के साथ प्रत्येक नई वाक्य को खोलना और बंद करना केवल आवश्यकता है। –

3

ऐसा लगता है कि अंतर्निहित UIScrollViewआईओएस 5.x से शुरू हो रहा है।

webViewDidFinishLoad: में आप एक ज़ूम अनुरोध कर सकते हैं, उदाहरण के लिए:

[webView.scrollView zoomToRect:CGRectMake(0.0, 0.0, 50.0, 50.0) animated:YES]; 

यह YES को scalesPageToFit सेट के साथ भी काम करने के लिए लगता है।

0

आदेश है कि आप इन आदेशों की स्थापना कर रहे हैं बदलकर देखें - हाँ करने के लिए पहले scalePagesToFit और उसके बाद:

[webView stringByEvaluatingJavaScriptFromString: @"document.body.style.zoom = 5.0;"]; 
3

यह वास्तव में शानदार है। मुझे ज़ूम क्षमता होने की आवश्यकता थी जबकि स्केलपेज्सफॉइट नहीं है। यद्यपि आपका कोड टॉमस्विफ्ट काम करने के लिए काम नहीं करता था, लेकिन इसके लिए मामूली समायोजन चाल था।

मैं इसे आईओएस 6.x पर चला रहा हूं ... एक आकर्षण की तरह काम करता है।

NSString* js = 
     @"var meta = document.createElement('meta'); " \ 
     "meta.setAttribute('name', 'viewport'); " \ 
     "meta.setAttribute('content', 'width = device-width, initial-scale=1.0, minimum-scale=0.2, maximum-scale=5.0; user-scalable=1;'); " \ 
     "document.getElementsByTagName('head')[0].appendChild(meta)"; 

[webView stringByEvaluatingJavaScriptFromString: js]; 

बहुत बढ़िया टिप टॉम।

0

मेरे उत्तर के साथ अंतर यह है कि आप चौड़ाई निर्धारित करने से पहले व्यूपोर्ट को साफ़ कर रहे हैं।

यह आपकी विशेषता परिवर्तन को रीसेट किए बिना वेब दृश्य को घुमाने या आकार बदलने के बाद (लोड होने के बाद) अनुमति देता है।

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    // Clear view port 
    NSString* js = @"$('meta[name=viewport]').remove();"; 
    [webView stringByEvaluatingJavaScriptFromString: js]; 

    // Set content size 
    js = [NSString stringWithFormat:@"var meta = document.createElement('meta');" 
      "meta.setAttribute('name', 'viewport'); " 
      "meta.setAttribute('content', 'width = device-width, initial-scale = 5.0, user-scalable = yes'); " 
      "document.getElementsByTagName('head')[0].appendChild(meta);"]; 

    [webView stringByEvaluatingJavaScriptFromString: js]; 
}