2016-10-06 2 views
0

Загрузите файл PDF размером> 5 МБ в мой UIWebView. Я хочу масштабировать PDF-файл до определенного уровня после загрузки.webViewDidFinishLoad вызывается перед загрузкой файла - iOS 8

func webViewDidFinishLoad(webView: UIWebView) { 
     webView.scrollView.setZoomScale(3.0, animated: false) 
     webView.scrollView.contentOffset = CGPointMake(0, -(self.webView.scrollView.contentInset.top)) 
    } 

Приведенный выше фрагмент дает ожидаемый результат на iOS 9+. Но на iOS 8, когда webViewDidFinishLoad уволен, PDF-файл не загружается и эффект не действует. enter image description here

Я также попытался

 let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.1 * Double(NSEC_PER_SEC))) 
     dispatch_after(delayTime, dispatch_get_main_queue()) { 
      webView.scrollView.setZoomScale(3.0, animated: false) 
      webView.scrollView.contentOffset = CGPointMake(0, -(self.webView.scrollView.contentInset.top)) 
     } 

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

Я пробовал много решений, которые я получил на прибегая к помощи

UIWebView: when did a page really finish loading?

How to detect when a UIWebView has completely finished loading?

UIWebView - How to identify the "last" webViewDidFinishLoad message?

Но ничего не решить мою проблему.

Индикатор активности, который мы видим на скриншоте, не добавлен мной. Индикатор исчезает после полной загрузки PDF-файла. Во всяком случае, если бы мы могли идентифицировать событие, когда индикатор исчезает, я могу масштабировать файл.

Есть ли способ определить его? Или каким-либо другим способом определить завершение загрузки файла?

ответ

0

У меня была аналогичная проблема в WKWebView. Моим решением было добавить наблюдателя для contentSize в webView.scrollView. Не уверен, что это поможет решить вашу проблему, но, надеюсь, он укажет вам в правильном направлении.

webView.scrollView.addObserver(self, forKeyPath: #keyPath(UIScrollView.contentSize), options: .new, context: nil) 

Сделайте что-нибудь, когда вы получите результат

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 
    if keyPath == #keyPath(UIScrollView.contentSize) { 
     //do something 
    } 
} 
+0

Проблема сталкивается в добавлении наблюдателя, когда пользователь делает масштабирование Pinch также, слушатель называется там заканчиваясь с мерцанием страницы. Есть ли способ идентифицировать 'contentSize', вызванный пользователем в' observValue() '? – iOS

Смежные вопросы