从UIWebView中删除渐变背景?

如何从UIWebView中删除渐变 – 如果您过度滚动顶部或底部,将会看到该渐变。 这个代码

webView.backgroundColor = [UIColor whiteColor]; 

只是改变渐变的颜色,它不会删除它。 如何才能做到这一点?

(注意:与UIWebView不同的问题不同)

啊哈,是的术语失败。 我根本不会说这个影子,但是我们可以一起玩。 这是我的types安全的代码来实现的效果。 总结一下:这将隐藏滚动视图的任何图像视图子项。 它不像(objectAtIndex:0)方法那样容易改变,所以如果苹果重新sortingwebView控件的子元素,它会工作的很好,但仍然依赖于梯度效果应用于图像浏览的父元素视图(并确实有一个滚动视图支撑网页视图)。

 { 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]; } } } } } 

透明的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]; } } } } 

用于隐藏滚动指示器

你是说影子? 删除UIWebView阴影?

我发现如何做到这一点的唯一方法是:

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

它只是通过UIWebView的子视图,并删除该视图,如果它是一个图像视图。

我没有把它放在任何App Store应用程序中,所以我不知道苹果是否会接受它。

编辑:布赖恩的链接提供了更多的细节。

使用上面build议的方法,你将不能够编辑你的滚动指标/插图。 他们也显示为UIImageView,所以你应该检查最后一个对象:

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

我能够通过在WebView的scrollView的顶部和底部添加白色子视图来做到这一点。 我控制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, eg by rotating the device _topCover.autoresizingMask = UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth; _bottomCover.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth; [webView.scrollView addSubview:_topCover]; [webView.scrollView addSubview:_bottomCover]; } 

我在页面加载后运行它,以便webView.scrollView.contentSize.height将给我正确的高度。 我不确定如果您的网页dynamic变化高度,这将如何工作。 我的页面只加载一次; 如果你正在重新加载,你会想在第一次之后跳过在_topCover_bottomCover上运行alloc / init来提高效率。

更新:我不确定上面的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); } 

我已经build立在@不通的答案

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