2011-06-22 9 views
17

के अंदर मैं UIWebViewUIScrollView के अंदर रखना चाहता हूं। UIWebView कभी-कभी आईफ़ोन स्क्रीन की सीमाओं से बाहर हो जाएगा, इसलिए मुझे दृश्य को स्क्रॉल करने का एक तरीका चाहिए ताकि मैं सभी सामग्री देख सकूं (लेकिन मैं UIWebView के अंतर्निहित स्क्रॉलिंग का उपयोग नहीं करना चाहता)। इसलिए मैं सभी सामग्री को UIScrollView के अंदर डालने और फिर UIScrollView की ऊंचाई को UIWebView की ऊंचाई और इसके अन्य दृश्यों के बराबर बनाने की सोच रहा हूं।आईआईएस UIWebView एक UIScrollView

यहाँ मेरी समस्या का वर्णन करने में मदद करने के लिए एक छवि है:

Interface Builder Image

उत्तर

37

मैं बिल्कुल किया ही बात। यहाँ कैसे मैं यह काम किया जाता है:

  1. UIWebView UIScrollView (जाहिर है ;-)
  2. अक्षम UIWebView के देशी स्क्रॉल का एक subview के रूप में (आप कर सकते हैं कि UIWebView की subviews के माध्यम से पुनरावृत्ति द्वारा जब तक आप पाते हैं यह UIScrollView है और सेट scrollEnabled = नहीं उस पर।
  3. सेट अपने UIScrollView के contentSize और UIWebViews HTML सामग्री के आकार के UIWebView का फ्रेम।

अंतिम बिंदु थोड़ी सूझबूझ से काम है, क्योंकि आप नहीं कर सकते सुनिश्चित करें कि एचटीएमएल पूरी तरह से ren है WebViewDidFinishLoad जब dered: UIWebViewDelegate पर कॉल किया जाता है।

1.Add एचटीएमएल करने के लिए एक जावास्क्रिप्ट समारोह कहा जाता हो जाता है कि जब HTML दस्तावेज़ तैयार है::

window.onload = function() { 
    window.location.href = "ready://" + document.body.offsetHeight; 
} 

यह कार्यों अनुरोध भेजता

यहाँ HTML सामग्री आकार पाने के लिए एक विश्वसनीय तरीका है इसकी यूआरएल में सामग्री की ऊंचाई है।

अपने UIWebViewDelegate 2.In आप इस अनुरोध को रोकना:

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { 
     NSURL *url = [request URL]; 
     if (navigationType == UIWebViewNavigationTypeOther) { 
      if ([[url scheme] isEqualToString:@"ready"]) { 
       float contentHeight = [[url host] floatValue]; 
       yourScrollView.contentSize = CGSizeMake(yourScrollView.frame.size.width, contentHeight + yourWebView.frame.origin.y); 
       CGRect fr = yourWebView.frame; 
       fr.size = CGSizeMake(yourWebView.frame.size.width, contentHeight); 
       yourWebView.frame = fr; 

       return NO;  
     } 

     return YES; 
} 

आशा है कि मदद करता है

अद्यतन

यहाँ स्विफ्ट 2 संस्करण है:

func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool { 
    guard navigationType == .Other else { return true } 
    if let url = request.URL, let host = url.host { 
     guard url.scheme == "ready" else { return true } 
     if let contentHeight = Float(host) { 
      yourScrollView.contentSize = CGSizeMake(yourScrollView.bounds.size.width, CGFloat(contentHeight)) 
      var fr = webView.frame 
      fr.size = CGSizeMake(fr.size.width, CGFloat(contentHeight)) 
      webView.frame = fr 
     } 

     return false 
    } 

    return true 
} 
सकते हैं
+0

कोई इसे तेजी से अनुवाद करें? –

+0

@YestayMuratov देर से उत्तर के लिए खेद है। मैंने अपने उत्तर – joern

+0

@joern में एक स्विफ्ट 2 संस्करण जोड़ा जो एचटीएमएल सामग्री से जुड़ा हुआ जेएस के साथ "अधिक दिखाएं" लिंक जैसा कुछ है (एक लेख का विस्तार या लोड और विस्तार करने के लिए), ठीक है? – OgreSwamp