从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
在视图旋转时是足够的。 你可能需要把它放在包含你的UIWebView
的UIViewController
,以便在旋转之后调整封面大小:
- (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;