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