iPad UIWebView PDF рендеринг дает мне странные визуальные артефакты - PullRequest
5 голосов
/ 18 апреля 2010

У меня возникли трудности с использованием UIWebView для рендеринга PDF-файлов на iPad. В портретном режиме все работает нормально, но при повороте устройства в горизонтальное положение возникает странная визуальная причудливость. Увеличение (но не уменьшение) даже малейшего исправит это, но, очевидно, это не идеальный обходной путь.

Проблема возникает с любым файлом PDF (я пробовал несколько, все они хранятся локально в комплекте, а не извлекаются из Интернета). Я также создал клон проекта для iPhone, который, кажется, отлично работает, поэтому проблема связана с iPad. Проблема возникает как в симуляторе, так и на физическом iPad.

Скриншот

http://dev.boxkite.net/images/ipad/ipad-pdf.png

код

 NSString* filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"pdf"];
 NSData* data = [NSData dataWithContentsOfFile:filePath];

 [self.webView 
  loadData:data
  MIMEType:@"application/pdf"
  textEncodingName:@"UTF-8"
  baseURL:nil];

Большое спасибо за ваше время.

Ответы [ 7 ]

3 голосов
/ 28 октября 2010

Согласно Apple, это действительно известная ошибка.

Лучшее решение - позвонить

-[UIView setNeedsDisplay]

для каждого подпредставления в экземпляре веб-представления, например:

for(UIView* subview in webView)
{
    for(UIView *reloadView in [subview subviews])
    {
        if([reloadView class] != [UIImageView class])
        {
            [reloadView setNeedsDisplay];
        }
    }
}
2 голосов
/ 29 октября 2010

Это подтвержденная ошибка. Я нашел обходной путь, который работает для меня. Вы можете использовать этот код при изменении размера вашего представления или в событии автоматического поворота.


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

Вот и все.

2 голосов
/ 02 июля 2010

Единственный способ решить эту проблему - когда вы когда-либо поворачиваете / изменяете размер вашего UIWebView, это снова вызываете loadData :. Это оставляет его включенным примерно на секунду (в зависимости от размера файла), но пока это не самое страшное решение. Это, конечно, намного лучше, чем вызывать loadRequest: снова!

Ошибка была передана в Apple и была одобрена. Нет слов о назначенной дате.

1 голос
/ 11 июля 2011

Это решение без использования частного подподображения веб-просмотра. Это не идеально, но это обходной путь без перезагрузки или риска, что ваше приложение будет отклонено.

- (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];  
}
1 голос
/ 21 мая 2010

Единственный способ исправить рендеринг - это вызвать reload в UIWebView, но это не очень красиво.

1 голос
/ 26 апреля 2010

Это также происходит со мной, действительно очень бесит.Кто-нибудь знает, известна ли Apple эта проблема?Похоже, проблема в их коде, а не в том, что мы делаем неправильно.Единственный способ исправить это - сказать UIWebView перезагружать pdf после изменения ориентации - определенно не идеальный (особенно с большими pdf) - и даже тогда визуальное прерывание остается на долю секунды, пока не появится правильная версия.

1 голос
/ 20 апреля 2010

Я считаю, что это одна из многих ошибок симулятора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...