2010-06-09 14 views
35

UIWebView से ढाल को कैसे हटाएं - वह जो आप देखते हैं यदि आप ऊपर या नीचे overscroll करते हैं। इस कोडUIWebView से ढाल पृष्ठभूमि हटाएं?

webView.backgroundColor = [UIColor whiteColor]; 

सिर्फ ढाल के रंग बदल जाता है, यह उसे निकाल देता नहीं है। यह कैसे किया जा सकता है?

(ध्यान दें: नहीं UIWebView underside रूप में एक ही प्रश्न)

+1

मैं चाहते हैं इसे भी ढूंढें, क्योंकि इससे UIWebView में बाउंस अच्छा लगेगा ... –

+0

हां, यह सबसे कष्टप्रद है, मुझे समाधान में दिलचस्पी होगी – MrCranky

+0

संभावित डुप्लिकेट [UIWebView छाया हटाएं?] (http://stackoverflow.com/questions/1074320/remove-uiwebview-sh adow) – JosephH

उत्तर

82

आह, हां शब्दावली विफल। मैं उस पर एक छाया नहीं कहूंगा, लेकिन सीए ला लाई। प्रभाव प्राप्त करने के लिए मेरा प्रकार-सुरक्षित कोड यहां दिया गया है। संक्षेप में: यह स्क्रॉल व्यू के किसी भी छवि-दृश्य बच्चों को छुपाएगा। यह (objectAtIndex: 0) विधियों के रूप में बदलने के लिए कमजोर नहीं है, इसलिए यदि ऐप्पल वेब दृश्य नियंत्रण के बच्चों को फिर से ऑर्डर करता है तो यह ठीक काम करेगा, लेकिन फिर भी इस तथ्य पर निर्भर करता है कि ढाल प्रभाव को स्क्रॉल पर अभिभावित छविदृश्यों द्वारा लागू किया जाता है देखें (और वास्तव में वेब दृश्य को अंडरपिन करने वाला एक स्क्रॉलव्यू है)।

{ 
    webView.backgroundColor = [UIColor whiteColor]; 
    for (UIView* subView in [webView subviews]) 
    { 
     if ([subView isKindOfClass:[UIScrollView class]]) { 
      for (UIView* shadowView in [subView subviews]) 
      { 
       if ([shadowView isKindOfClass:[UIImageView class]]) { 
        [shadowView setHidden:YES]; 
       } 
      } 
     } 
    } 
} 
+3

आप इसे एक छाया नहीं कहेंगे? निश्चित रूप से इसे ढाल तैयार करके कार्यान्वित किया जाता है, लेकिन इसका उद्देश्य पृष्ठभूमि पर वेबव्यू को फ़्लोट करना है। तो मैं अभी भी इसे एक छाया कहूंगा :-) – Brian

+0

यह काफी उचित है। :-) बाउंटी को प्रश्न जोड़ने के लिए सम्मानित किया गया, हालांकि इसे शायद डुप्लिकेट के रूप में बंद किया जाना चाहिए? एक वास्तविक उत्तर के लिए – MrCranky

+0

+1 जो अभी भी 2 साल बाद काम करता है। –

1

एक ही रास्ता मैंने पाया कि इसे कैसे किया गया था:

for(UIView *aView in [[[webView subviews] objectAtIndex:0] subviews]) { 
     if([aView isKindOfClass:[UIImageView class]]) { aView.hidden = YES; } 
} 

यह सिर्फ बस UIWebView की subviews के माध्यम से कदम और देखने को हटा अगर यह एक छवि दृश्य है।

मैंने इसे किसी ऐप स्टोर ऐप में नहीं रखा है, इसलिए मुझे नहीं पता कि ऐप्पल इसे स्वीकार करेगा या नहीं।

संपादित करें: ब्रायन का लिंक अधिक जानकारी प्रदान करता है।

0

ऊपर सुझाए गए विधि का उपयोग करके आप बाद में अपने स्क्रॉल सूचक/इन्सेट को संपादित नहीं कर पाएंगे। उन्होंने यह भी UIImageView के रूप में दिखाई देते हैं, तो आप पिछले वस्तु के लिए जाँच करनी चाहिए: UIWebView पारदर्शी करने के लिए

  UIView* lastView = [[subView subviews] lastObject]; 
      for (UIView* shadowView in [subView subviews]) 
      { 
       if(shadowView!=lastView) ... <-this one is a scroll 
      } 
3

और स्क्रॉल को हटा दें।

webView.opaque = NO; 
webView.backgroundColor = [UIColor clearColor]; 
for(UIView *view in webView.subviews){  
     if ([view isKindOfClass:[UIImageView class]]) { 
      // to transparent 
      [view removeFromSuperview]; 
     } 
     if ([view isKindOfClass:[UIScrollView class]]) { 
      UIScrollView *sView = (UIScrollView *)view; 
      for (UIView* shadowView in [sView subviews]){ 
       //to remove shadow 
       if ([shadowView isKindOfClass:[UIImageView class]]) { 
        [shadowView setHidden:YES]; 
       } 
      } 
     } 
} 

के लिए hide scroll indicators

+0

webView.opaque = NO; क्या आपने इसका उपयोग किया है .. – damithH

+0

यह सुनिश्चित करना याद रखें कि वेबदृश्य का कोई पर्यवेक्षण भी पारदर्शी है :) फिर यह स्क्रिप्ट आपके लिए काम करेगी – hfossli

0

मैं ऊपर और WebView के scrollview की तह तक सफेद subviews जोड़ कर ऐसा कर सकता था। मैं वेबव्यू की सामग्री को नियंत्रित करता हूं, इसलिए मुझे पता है कि सफेद ठीक है - अगर आप मनमानी सामग्री लोड कर रहे हैं तो यह काम नहीं करेगा।

// _topCover and _bottomCover are ivar UIViews 
- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    // with cover views 300pt high, I couldn't scroll far enough to see the shadow, 
    // even in portrait on an iPad, which gives you the longest scroll distance 
    CGFloat coverage = 300; 

    _topCover = [[UIView alloc] initWithFrame:CGRectMake(0, -coverage, webView.bounds.size.width, coverage)]; 
    _bottomCover = [[UIView alloc] initWithFrame:CGRectMake(0, webView.scrollView.contentSize.height, webView.bounds.size.width, coverage)]; 
    _topCover.backgroundColor = [UIColor whiteColor]; 
    _bottomCover.backgroundColor = [UIColor whiteColor]; 

    // in case the webView is resized, e.g. by rotating the device 
    _topCover.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth; 
    _bottomCover.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth; 

    [webView.scrollView addSubview:_topCover]; 
    [webView.scrollView addSubview:_bottomCover]; 
} 

मैं इसे यह पृष्ठ लोड होने लग जाते हैं ताकि webView.scrollView.contentSize.height मुझे सही ऊंचाई दे देंगे। मुझे यकीन नहीं है कि यह कैसे काम करेगा यदि आपके पृष्ठ गतिशील रूप से ऊंचाई बदल रहे हैं। मेरा पृष्ठ केवल एक बार लोड होता है; अगर आपका पुनः लोड हो रहा है, तो आप दक्षता के लिए पहली बार alloc/init_topCover और _bottomCover पर चलना चाहेंगे।

अद्यतन: मुझे यकीन नहीं है कि autoresizingMask का मेरा उपयोग, जब दृश्य घूमता है तो पर्याप्त है।आप घूर्णन के बाद कवर आकार बदलने के लिए UIViewController कि आपके UIWebView शामिल में इस डाल करने के लिए आवश्यकता हो सकती है:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{   
    CGFloat coverage = 300; 
    _topCover.frame = CGRectMake(0, -coverage, self.webView.bounds.size.width, coverage); 
    _bottomCover.frame = CGRectMake(0, self.webView.scrollView.contentSize.height, self.webView.bounds.size.width, coverage); 
} 
0

मैं पर बनाया गया है @damithH के जवाब

@implementation UIWebView (Extensions) 

- (void)setBackgroundAndShadowVisible:(BOOL)visible 
{ 
    self.opaque = !visible; 
    self.backgroundColor = [self.backgroundColor colorWithAlphaComponent:visible ? 1.0 : 0.0]; 
    for(UIView *view in [self subviews]) 
    { 
     if([view isKindOfClass:[UIImageView class]]) 
     { 
      view.hidden = !visible; 
     } 
     if([view isKindOfClass:[UIScrollView class]]) 
     { 
      UIScrollView *scrollView = (UIScrollView *)view; 
      for (UIView *shadowView in [scrollView subviews]) 
      { 
       if ([shadowView isKindOfClass:[UIImageView class]]) 
       { 
        shadowView.hidden = !visible; 
       } 
      } 
     } 
    } 
} 

@end 
0
if (UIDevice.currentDevice.systemVersion.intValue < 7) 
    for (UIImageView *imageView in webView.scrollView.subviews) 
     if ([imageView isKindOfClass:[UIImageView class]] && imageView.image.size.width == 1) 
      imageView.hidden = YES; 
संबंधित मुद्दे