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

Iphone 是否删除或更改UIWebView文档显示周围框架的颜色?,iphone,ios,uiwebview,Iphone,Ios,Uiwebview,我使用UIWebView来显示嵌入到主视图中的各种文件类型(因此我不能使用专用的PDF查看器)(因此我不能使用模式文档交互控制器)。“我的主视图”的背景设计与出现在UIWebView中文档周围的浅灰色框架冲突。有人知道如何去除灰色框架,使其透明或改变其颜色吗 我熟悉并使用了UIWebView的技术,以避免在加载时出现“彩色闪光”,并在“过度浏览”web视图时出现这种情况,但我没有看到任何人处理这个灰色框架。(它仅在显示.doc或.pdf等文档时出现,而不是在显示HTML内容时出现。)我已隐藏了所

我使用
UIWebView
来显示嵌入到主视图中的各种文件类型(因此我不能使用专用的PDF查看器)(因此我不能使用模式文档交互控制器)。“我的主视图”的背景设计与出现在
UIWebView
中文档周围的浅灰色框架冲突。有人知道如何去除灰色框架,使其透明或改变其颜色吗


我熟悉并使用了
UIWebView
的技术,以避免在加载时出现“彩色闪光”,并在“过度浏览”web视图时出现这种情况,但我没有看到任何人处理这个灰色框架。(它仅在显示.doc或.pdf等文档时出现,而不是在显示HTML内容时出现。)我已隐藏了所有作为
UIWebView的
滚动视图的子视图的图像,因此显然这是来自其他地方。

您可以通过指定其
backgroundColor
属性来更改WebView的背景色:

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

如果您想要透明,请使用
[UIColor clearColor]
。但请记住,通过让您的视图成为家长,您可能会恶化应用程序的性能

既然这已经有一段时间了,我就把一些想法说出来

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


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

您需要一堆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
方法(我想
webView.scrollView.delegate的
scrollViewDidScroll
是个好地方)。您还需要在项目中包含
QuartzCore
框架

这里发生了什么:


任何视图都使用名为
层的东西进行渲染。层可以有自己的层次结构,每一层都可以有自己的边界和阴影,所以让你烦恼的帧就是其中一层的阴影。坏事情-UIWebView在滚动时重新创建它-所以您需要经常使用此方法。我猜,
shadowOpacity
附带了一个默认动画,因此需要CATTransaction来禁用它。

看起来无法从UIWebView中删除边框,但您不能使用苹果在这里展示的
CGContextDrawPDFPage()
:试试这个

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

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

此问题是在iOS 4是当前的时候编写的,但在iOS 5和更高版本中,仅设置UIWebView的背景颜色和不透明属性将删除该灰色帧:

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

不幸的是,这并没有改变在web视图中显示的.doc或.pdf文件周围显示的灰色框架。它只会在文档加载或过卷时更改灰色框架后面的颜色。我认为这在当前SDK中无法实现。这在未来的iOS版本中可能是可能的。我没想到会有一个官方的方法来做到这一点,但我希望有人有一个聪明的解决办法,比如隐藏阴影图像。这很酷,在我的测试中,在滚动或缩放过程中不会重新创建阴影。然而,问题是如何更改帧的颜色,而不是如何删除阴影!好的,如果(l.shadowOpacity>0){l.shadowColor=[UIColor redColor].CGColor;}
而不是
l.shadowOpacity=0,则添加
据我所知,它会改变框架的颜色,“出现在文档周围的浅灰色框架”是CALayer阴影,正如我在回答中提到的。因此,我的代码-正在删除它,并使pdf文件按原样浮动,每个页面周围没有边框对不起,有一个默认为浅灰色的背景色,然后上面的阴影是分开的。我认为这令人困惑,因为问题来自iOS 4;我们现在需要做的就是更改UIWebView背景色,以消除我刚才提到的框架。我刚刚在上面的原始问题中添加了一条评论。哦,你是对的,这并不能解决iOS4中的问题,对不起。我注意到这个问题中添加了悬赏,所以我回去看看我自己的应用程序的结局。显然,这个问题是由iOS 5解决的,它是在我发布问题几个月后发布的。在iOS 5设备上,更改UIWebView的背景颜色(或将其设置为clearColor)可以按预期工作,但在iOS 4设备上,灰色边框仍会出现。我甚至没有注意到这个问题已经消失了,否则我会在那个时候发回这里。这能回答你的问题吗,维维亚纳兰哈?如果没有,可能您在当前的iOS中看到了不同的问题。请参考[这些链接][1],希望这可以帮助您实现您的需求。[1] :在当前的iOS版本12.3.1之前,它一直在为我工作。