Deferring viewWillAppear até webViewDidFinishLoad
Tenho um aplicativo que usaUIWebViews
em vários controladores de exibição. OUIWebViews
são usados para renderizar html gerado localmente, sem necessidade de acesso lento à red
Para economizar memória, eu os carrego somente sob demanda, conforme solicitado pelo viewcontrollerviewWillAppear
ligue de volta. (E descarregue instâncias fora da tela em resposta adidReceiveMemoryWarning
mensagens.)
O problema é que o usuário pode ver o html sendo renderizado, às vezes acompanhado por flashes de estilo e outros artefatos desagradáveis. Prefiro que a renderização seja feita fora da tela e revele a visualização totalmente renderizada quando estiver pront
Seria muito arrumado poder ter oviewWillAppear
não retornará até que o UIWebView seja totalmente renderizado. Mas como
Eu digo aUIWebView
o que render enviando umloadHTMLString:baseURL:
mensagem. Isso é assíncrono e, algum tempo (em breve) mais tarde, o delegado da visualização na web é chamado de voltawebViewDidFinishLoad
.
Eu experimentei executar um runloop dentroviewWillAppear
, executando oNSDefaultRunLoopMode
ouUITrackingRunLoopMode
. Isso funciona no simulador (queixa-se ao log
[Sincronização de transação] chamada na transação
mas funciona), mas em um dispositivo ele trava, comwebViewDidFinishLoad
nunca sendo chamado.
(Além disso, parece que oUIWebView
propriedade @ loading não funciona. Pelo menos, depois que eu ligo paraloadHTMLString:baseURL:
e antes de receber o retorno de chamada, não é verdade.)