문제

사용하는 응용 프로그램이 있습니다 UIWebViews 여러 뷰 컨트롤러에서. 그만큼 UIWebViews 로컬로 생성 된 HTML 렌더링하는 데 사용되며 느린 네트워크 액세스가 필요하지 않습니다.

메모리를 저장하려면 ViewController가 제기 한대로 요청에만 적재합니다. viewWillAppear 콜백. (및 응답으로 오프 스크린 인스턴스를 언로드합니다 didReceiveMemoryWarning 메시지.)

문제는 사용자가 HTML이 렌더링되는 것을 보게되며 때로는 스타일의 플래시 및 기타 불쾌한 불쾌한 유물이 동반된다는 것입니다. 나는 오히려 렌더링을 화면에서 벗어나고 준비가되었을 때 완전히 렌더링 된보기를 드러냅니다.

가질 수있는 것은 매우 깔끔 할 것입니다. viewWillAppear UIWebView가 완전히 렌더링 될 때까지 돌아 오지 않습니다. 하지만 어떻게?

나는 말한다 UIWebView 그것을 보내어 렌더링해야 할 것 a loadHTMLString:baseURL: 메시지. 이것은 비동기식이며, 얼마 후 (곧) 나중에 WebView의 대의원이 다시 전화를받습니다. webViewDidFinishLoad.

나는 내부에서 런 루프를 실험하는 것을 실험했다 viewWillAppear, 둘 중 하나를 실행합니다 NSDefaultRunLoopMode 또는 UITrackingRunLoopMode. 이것은 시뮬레이터에서 작동합니다 (로그에 불만이 있습니다.

Catransaction Synchronize]는 트랜잭션 내에서 호출됩니다

그러나 작동합니다) 그러나 장치에서는 교착 상태가 있습니다. webViewDidFinishLoad 결코 부름받지 않습니다.

(또한, 그것은 것 같습니다 UIWebView 로딩 속성이 작동하지 않습니다. 적어도 전화 후 loadHTMLString:baseURL: 그리고 콜백을 받기 전에 사실이 아닙니다.)

올바른 솔루션이 없습니다

다른 팁

여기에 많은 솔루션이 생각합니다. 빠른 것은 숨겨진 속성을 예로 설정 한 상태에서 uiwebview를로드하는 것입니다. 그런 다음 UiwebViews Delegate 및 구현으로 UIViewController를 설정하십시오.

- (void)webViewDidFinishLoad:(UIWebView *)webView

속성을 다시 설정하는 곳.

주목해야 할 것은 컨텐츠 프레임/내장 된 컨텐츠가 있으면 WebViewDidFinishload가 두 번 이상 발사된다는 것입니다. 따라서 이것을 추적해야합니다. 로컬 콘텐츠를로드하는 경우 실제로 문제가되지 않아야합니다.

나는 Monowerker의 솔루션을 가장 좋아하지만 또 다른 솔루션은 이미 렌더링 된 Uiwebview (View Controller보다 더 영구적 인 개체)를 항상 유지하는 것입니다. Monowerker의 해결책이 너무 파괴적 인 경우에만 그렇게 할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top