2010-06-09 80 views
35

如何從UIWebView中刪除漸變 - 如果過度滾動頂部或底部,就會看到該漸變。 此代碼從UIWebView中刪除漸變背景?

webView.backgroundColor = [UIColor whiteColor]; 

只是改變漸變的顏色,它不會刪除它。如何才能做到這一點?

(注意:不是同一個問題作爲UIWebView underside

+1

我想找到這一點,因爲這將使UIWebView中反彈看起來不錯... – 2010-10-22 13:26:35

+0

是的,這是最煩人的,我也有興趣在解決方案 – MrCranky 2010-11-12 15:20:26

+0

可能重複的[刪除UIWebView影?](http:///stackoverflow.com/questions/1074320/remove-uiwebview-sh adow) – JosephH 2012-03-26 10:11:51

回答

82

啊哈,是的術語失敗。我根本不會說那個影子,但是我會說。這是我的類型安全的代碼來實現效果。總結一下:這將隱藏滾動視圖的任何圖像視圖子節點。它不像(objectAtIndex:0)方法那樣容易改變,所以如果Apple重新排序webView控件的子項,它將會很好地工作,但仍然依賴於漸變效果適用於父視圖的圖像視圖視圖(並確實有一個基於Web視圖的滾動視圖)。

{ 
    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

你不會說它是一個影子嗎?當然,它是通過繪製漸變來實現的,但目的是讓webview看起來像浮在背景上。所以我仍然會稱它爲一個影子:-) – Brian 2010-11-12 21:51:23

+0

這很公平。 :-)賞金因連接這個問題而獲獎,但是這個人可能會被重複關閉嗎? – MrCranky 2010-11-17 12:09:46

+0

+1,這個答案在2年後仍然有效。 – 2012-06-13 12:28:07

1

我發現如何做到這一點的唯一方法是:

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

它只是僅有幾步之遙通的UIWebView的子視圖,並刪除了該視圖,如果它是一個圖像視圖。

我沒有把它放在任何App Store應用程序中,所以我不知道蘋果是否會接受它。

編輯:布賴恩的鏈接提供了更多的細節。

0

使用上面建議的方法,您將不能在稍後編輯您的滾動指示器/插槽。它們也顯示爲UIImageView,因此您應該檢查最後一個對象:

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

要透明UIWebView並移除滾動條。

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 2013-01-23 09:35:57

+0

記得要確保webview的任何超級視圖也是透明的:)然後這個腳本將爲你工作 – hfossli 2013-01-23 11:58:00

0

我能夠通過添加白色子視圖中的WebView滾動型的頂部和底部做到這一點。我控制着WebView的內容,所以我知道白色是可以的 - 如果你正在加載任意內容,這是行不通的。

// _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就足夠了。您可能需要把這個包含您的UIWebViewUIViewController旋轉後,調整內容包括:

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