iPad UIWebView PDF呈现给了我奇怪的视觉效果

iPad UIWebView PDF呈现给了我奇怪的视觉效果,pdf,uiwebview,ipad,Pdf,Uiwebview,Ipad,我在使用UIWebView在iPad上渲染PDF文件时遇到了一些困难。在纵向模式下一切正常,但将设备切换到横向会产生奇怪的视觉效果。放大(但不是缩小)哪怕是一点点都可以纠正它,但显然这不是一个理想的解决办法 任何PDF文件都会出现问题(我尝试了几个,都存储在包中,而不是从web检索)。我还为iPhone创建了一个项目的克隆,它似乎工作得很好,所以问题是iPad特有的。这个问题发生在模拟器和物理iPad上 截图 代码 非常感谢您的时间。我相信这是众多模拟器错误中的一个。这也发生在我身上,真的很恼

我在使用UIWebView在iPad上渲染PDF文件时遇到了一些困难。在纵向模式下一切正常,但将设备切换到横向会产生奇怪的视觉效果。放大(但不是缩小)哪怕是一点点都可以纠正它,但显然这不是一个理想的解决办法

任何PDF文件都会出现问题(我尝试了几个,都存储在包中,而不是从web检索)。我还为iPhone创建了一个项目的克隆,它似乎工作得很好,所以问题是iPad特有的。这个问题发生在模拟器和物理iPad上

截图

代码
非常感谢您的时间。

我相信这是众多模拟器错误中的一个。

这也发生在我身上,真的很恼火。有人知道苹果是否知道这个问题吗?似乎是他们的代码有问题,而不是我们做错了什么。我发现修复它的唯一方法是告诉UIWebView在方向更改后重新加载pdf—绝对不理想(尤其是对于大型pdf)—即使如此,视觉切块仍会在正确版本出现之前保留几分之一秒。

修复渲染的唯一方法是在UIWebView上调用重新加载,但这并不漂亮。

解决此问题的唯一方法是在旋转/更改UIWebView的大小时再次调用loadData:。这会让它打开大约一秒钟(取决于文件大小),但目前还不是一个糟糕的修复方法。这当然比再次调用loadRequest要好得多


该漏洞已提交给苹果公司,并已获得批准。没有固定日期的消息

根据苹果公司的说法,这确实是一个已知的错误

更好的解决办法是打电话

-[UIView setNeedsDisplay]
在web视图实例中的每个子视图上,如下所示:

for(UIView* subview in webView)
{
    for(UIView *reloadView in [subview subviews])
    {
        if([reloadView class] != [UIImageView class])
        {
            [reloadView setNeedsDisplay];
        }
    }
}

这是一个确定的错误。我找到了一个适合我的解决办法。调整视图大小或在自动旋转事件中可以使用此代码


for (UIView *v in [webView subviews]) {
  for (UIView *v2 in [v subviews]) {
    if ([v2 class] != [UIImageView class]) [v2 setNeedsDisplay];
  }
}


就是这样。

这是一个不使用webview的私有子视图的解决方案。 它不是完美的,但它是一种不需要重新加载或冒应用被拒绝风险的解决方法

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    for (UIView *v in [web subviews]) {  
        [self performSelector:@selector(correctPDFView:) withObject:v afterDelay:0.0];  
    }  
    return YES;  
}

-(void)correctPDFView:(UIScrollView*)scroll{   
    [scroll setZoomScale:scroll.minimumZoomScale animated:NO];  
    [self performSelector:@selector(correctPDFView2:) withObject:scroll afterDelay:0.5];  
}

-(void)correctPDFView2:(UIScrollView*)scroll{  
    [scroll setZoomScale:scroll.minimumZoomScale+0.01f animated:YES];  
    [self performSelector:@selector(correctPDFView3:) withObject:scroll afterDelay:0.5];  
}

-(void)correctPDFView3:(UIScrollView*)scroll{  
    [scroll setZoomScale:scroll.minimumZoomScale animated:YES];  
}

更新:如果禁用webView.scalesPageToFit,则不会出现此问题。这不是这个项目的选项,但它至少缩小了罪魁祸首的范围。@ash:建议使用标记语法()而不是HTML。@KennyTM:标记规范允许直接HTML,堆栈溢出也是如此:实际上,它也发生在物理iPad上。哦,不太好。我也有,但一直忽略它作为一个模拟错误。希望我的3G iPad能在这里测试…很高兴我不是一个人。奇怪的是,使用Safari或MobileMail查看PDF效果很好,尽管这两种方式使用WebKit的方式与我相同。这有可能被苹果视为使用私有API,并导致应用被拒绝吗??(这些子视图是私有的)
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    for (UIView *v in [web subviews]) {  
        [self performSelector:@selector(correctPDFView:) withObject:v afterDelay:0.0];  
    }  
    return YES;  
}

-(void)correctPDFView:(UIScrollView*)scroll{   
    [scroll setZoomScale:scroll.minimumZoomScale animated:NO];  
    [self performSelector:@selector(correctPDFView2:) withObject:scroll afterDelay:0.5];  
}

-(void)correctPDFView2:(UIScrollView*)scroll{  
    [scroll setZoomScale:scroll.minimumZoomScale+0.01f animated:YES];  
    [self performSelector:@selector(correctPDFView3:) withObject:scroll afterDelay:0.5];  
}

-(void)correctPDFView3:(UIScrollView*)scroll{  
    [scroll setZoomScale:scroll.minimumZoomScale animated:YES];  
}