在UIWebView文档显示周围删除或更改框架的颜色?

时间:2011-08-12 20:11:28

标签: iphone ios uiwebview

我正在使用UIWebView来显示嵌入到我的主视图中的各种文件类型(因此我无法使用专门的PDF查看器)(因此我无法使用模态文档交互控制器) 。我的主视图的背景设计与UIWebView中文档周围出现的浅灰色框架相冲突。有没有人知道如何删除那个灰色框架,使其透明或改变其颜色?

我熟悉并使用UIWebView的{​​{3}}技术来避免加载时出现“颜色闪烁”,以及“过度滚动”时出现的changing the background color网络视图,但我还没有看到任何人解决这个灰色框架。 (仅在显示.doc或.pdf等文档时出现,而不是在显示HTML内容时出现。)我隐藏了所有图像,这些图像是UIWebView's滚动视图的子视图,所以显然这是来自其他地方。

6 个答案:

答案 0 :(得分:2)

这个问题是在iOS 4是最新的时候编写的,但是在iOS 5及更高版本中,只需设置UIWebView的backgroundColor和opaque属性就会删除那个灰框:

myWebView.opaque = NO;
myWebView.backgroundColor = [UIColor clearColor];

答案 1 :(得分:0)

您可以通过分配其backgroundColor属性来更改WebView的背景颜色:

myWebView.backgroundColor = [UIColor redColor]; // will make red bakground

如果您希望透明度使用[UIColor clearColor]。但请记住 - 通过使您的观点变得透明,您可以恶化应用程序的性能。

答案 2 :(得分:0)

由于这已经存在了一段时间,我只想提出一些想法。

如果UIWebView将加载的文档视为页面,您可以使用stringByEvaluatingJavaScriptFromString:类的UIWebView方法来操作文档对象模型,但此方法有一些限制。

除此之外,您唯一可以随意使用的是操纵视图层次结构来修改UIWebView的任何子视图,但如果UIWebView可能没有任何操作可供处理class直接呈现查看器而不是创建层次结构。

答案 3 :(得分:0)

你需要一堆CoreAnimation魔法:

- (void) hideShadowInLayer:(CALayer *) layer
{
    for (CALayer *l in layer.sublayers) {
        l.shadowOpacity = 0;
        [self hideShadowInLayer:l];
    }
}

- (void) hideShadows
{
    [CATransaction begin];
    [CATransaction setValue:(id) kCFBooleanTrue forKey:kCATransactionDisableActions];
    [self hideShadowInLayer:webView.layer];
    [CATransaction commit];
}

您需要在加载文档后的某个位置执行hideShadows方法,并在滚动时(我猜scrollViewDidScroll webView.scrollView.delegate是一个好地方)。您还需要在项目中包含QuartzCore框架。

这里发生了什么:

任何视图都使用名为layer的内容进行渲染。图层可以有自己的层次结构,每个图层都可以有自己的边框和阴影,因此让你烦恼的框架就是其中一个图层的阴影。糟糕的事情 - UIWebView在滚动时重新创建它 - 所以你需要不断地使用这个方法。我猜shadowOpacity附加了一个默认动画,所以你需要CATransaction来禁用它。

答案 4 :(得分:0)

看起来无法从UIWebView中删除边框,但您不能像Apple在此处显示的那样使用CGContextDrawPDFPage()http://developer.apple.com/library/ios/#samplecode/ZoomingPDFViewer/Introduction/Intro.html

答案 5 :(得分:-1)

试试这个,

self.webview.backgroundColor = [UIColor whiteColor];

for (UIView* subView in [self.webview subviews])
{
    if ([subView isKindOfClass:[UIScrollView class]]) {
        for (UIView* shadowView in [subView subviews])
        {
            if ([shadowView isKindOfClass:[UIImageView class]]) {
                [shadowView setHidden:YES];
            }
        }
    }
}

这可能会对你有所帮助。 : - )