Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 是否从UIWebView中删除渐变背景?_Ios_Iphone_Uiwebview - Fatal编程技术网

Ios 是否从UIWebView中删除渐变背景?

Ios 是否从UIWebView中删除渐变背景?,ios,iphone,uiwebview,Ios,Iphone,Uiwebview,如何从UIWebView中删除渐变-如果您过度浏览顶部或底部,就会看到渐变。 此代码 webView.backgroundColor = [UIColor whiteColor]; 只需更改渐变的颜色,它不会删除渐变。如何做到这一点 (注意:问题与之不同)你是说阴影 你是说影子 我找到的唯一方法是: for(UIView *aView in [[[webView subviews] objectAtIndex:0] subviews]) { if([aView isKindO

如何从UIWebView中删除渐变-如果您过度浏览顶部或底部,就会看到渐变。 此代码

webView.backgroundColor = [UIColor whiteColor];
只需更改渐变的颜色,它不会删除渐变。如何做到这一点


(注意:问题与之不同)

你是说阴影

你是说影子

我找到的唯一方法是:

for(UIView *aView in [[[webView subviews] objectAtIndex:0] subviews]) { 
        if([aView isKindOfClass:[UIImageView class]]) { aView.hidden = YES; } 
}
它只需逐步遍历UIWebView的子视图,如果是图像视图,则删除该视图

我还没有把它放在任何应用商店的应用程序中,所以我不知道苹果是否会接受它


编辑:Brian的链接提供了更多详细信息。

我找到的唯一方法是:

for(UIView *aView in [[[webView subviews] objectAtIndex:0] subviews]) { 
        if([aView isKindOfClass:[UIImageView class]]) { aView.hidden = YES; } 
}
它只需逐步遍历UIWebView的子视图,如果是图像视图,则删除该视图

我还没有把它放在任何应用商店的应用程序中,所以我不知道苹果是否会接受它


编辑:Brian的链接提供了更多详细信息。

啊哈,是的。我不认为那是阴影,但这是生活。下面是我的类型安全代码实现的效果。总结:这将隐藏滚动视图的所有图像视图子项。它不像(objectAtIndex:0)方法那样容易更改,因此如果Apple对webView控件的子控件重新排序,它可以正常工作,但仍然依赖于这样一个事实,即渐变效果是由作为滚动视图父对象的ImageView应用的(并且确实有一个滚动视图支持web视图)


啊哈,是的。我不认为那是阴影,但这是生活。下面是我的类型安全代码实现的效果。总结:这将隐藏滚动视图的所有图像视图子项。它不像(objectAtIndex:0)方法那样容易更改,因此如果Apple对webView控件的子控件重新排序,它可以正常工作,但仍然依赖于这样一个事实,即渐变效果是由作为滚动视图父对象的ImageView应用的(并且确实有一个滚动视图支持web视图)


使用上面建议的方法,您以后将无法编辑滚动指示器/插图。它们也显示为UIImageView,因此您应该检查最后一个对象:

            UIView* lastView = [[subView subviews] lastObject];
            for (UIView* shadowView in [subView subviews])
            { 
                if(shadowView!=lastView) ... <-this one is a scroll 
            }
UIView*lastView=[[subView subView]lastObject];
对于(UIView*shadowView在[子视图子视图]中)
{ 

如果(shadowView!=lastView).使用上面建议的方法,您以后将无法编辑滚动指示器/插图。它们也显示为UIImageView,因此您应该检查最后一个对象:

            UIView* lastView = [[subView subviews] lastObject];
            for (UIView* shadowView in [subView subviews])
            { 
                if(shadowView!=lastView) ... <-this one is a scroll 
            }
UIView*lastView=[[subView subView]lastObject];
对于(UIView*shadowView在[子视图子视图]中)
{ 

如果(shadowView!=lastView).使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透明并删除滚动条

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

对于

我可以通过在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
将为我提供正确的高度。如果您的页面动态更改高度,我不确定这将如何工作。我的页面只加载一次;如果您的页面正在重新加载,您将希望跳过在
\u topCover
上运行
alloc
/
init
\u首次使用后的底盖
,以提高效率

更新:我不确定当视图旋转时,我使用上面的
自动重新定位任务是否足够。您可能需要将其放入包含
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);
}

我可以通过在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, 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
将为我提供正确的高度。如果您的页面动态更改高度,我不确定这将如何工作。我的页面只加载一次;如果您的页面正在重新加载,您将希望跳过在
\u topCover
上运行
alloc
/
init
\u首次使用后的底盖
,以提高效率

更新:我不确定当视图旋转时,我使用上面的
自动重新定位任务是否足够。您可能需要将其放入包含
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);
}

我建立在@Damith的答案之上

@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

我建立在@Damith的答案之上

@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)
用于(webView.scrollView.SubView中的UIImageView*imageView)
if([imageView isKindOfClass:[UIImageView类]]&&imageView.image.size.width==1)
imageView.hidden=是;
if(UIDevice.currentDevice.systemVersion.intValue<7)
用于(webView.scrollView.SubView中的UIImageView*imageView)
if([imageView isKindOfClass:[UIImageView类]]&&imageView.image.size.width==1)
imageView.hidden=是;

我也想知道这一点,因为这会使反弹在UIWebView中看起来很好…是的,这是最烦人的,我还对解决方案感兴趣。我也想知道这一点,因为这会使反弹在UIWebView中看起来很好…是的,这是最烦人的,我还对解决方案可能感兴趣你的副本不会称之为阴影?当然,它是通过绘制渐变来实现的,但目的是使网络视图看起来在背景上浮动。所以我仍然将其称为阴影:-)这很公平。:-)悬赏用于链接问题,尽管这一个是否应该作为副本关闭?仍然有效