Como ativar o zoom no UIWebView que está dentro do UIScrollView?

132

Eu tenho um UIWebViewque dentro de UIScrollView(scrollview contém outro componente)

Tentei habilitar o multitoque tanto no Interface Builder quanto no Programmatic,UIWebView mas ele ainda não pode aumentar o zoom para html. Preciso lidar com o zoom maior no UIScrollViewe UIWebView? Ou qualquer coisa que eu não tenho para definir?

calendarw
fonte
2
scalesPageToFit = YESfunciona, mas altera o tamanho do conteúdo padrão. Veja minha resposta. Isso será útil para você.
iPatel

Respostas:

348

Você DEVE definir scalePageToFit = YES para que qualquer pinça e zoom funcione em um UIWebView

john geshrick
fonte
2
Isso é bom, exceto que agora minha página está sendo reduzida para caber na visualização. Estou criando uma página HTML em código para exibir, e eu quero que ele permaneça no tamanho anterior, mas permitir que meus usuários para fazer zoom com zoom pitada
Dan F
33
Adicione a seguinte meta tag ao cabeçalho do seu documento HTML: <meta name = 'viewport' content = 'initial-scale = 1.0, maximum-scale = 10.0' />
vocaro
2
Como posso fazer a mesma coisa com um site externo? Ou seja, eu defino o zoom inicial e o zoom do usuário é ativado depois disso.
William Jockusch 6/11/11
Oi, Tudo está funcionando bem Paginação, ZoomIn / Out, etc ... Mas eu tenho um problema nisso. Meu aplicativo trabalhando nas duas orientações (retrato e paisagem). Agora, em retrato, eu tenho que deslizar a página 2-3 vezes para poder ir para a próxima página. Mas na paisagem, está funcionando bem. Eu tenho o webview dentro scrollview e scrollview tem paginação. Mas quando tentei deslizar o rolo para ir para a página seguinte, preciso deslizá-lo 2 a 3 vezes para ir para a página seguinte (no modo retrato). Alguma idéia sobre o mesmo. Obrigado pela ajuda.
Nishant B
resposta perfeita ... Obrigado
AL̲̳I
12

OK, você precisa fazer o que precede, mas também o seguinte. Eu tinha uma visualização na Web na visualização principal e isso não funcionou.

  1. Como acima, você primeiro precisa colocar um UIScrollView na visualização principal e depois a visualização na web na visualização de rolagem.
  2. Como acima, implemente <UIScrollViewDelegate>no seu controlador de exibição, arraste o delegado da exibição de rolagem para o controlador de exibição no Interface Builder e implemente o viewForZoomingInScrollViewmétodo. Isso deve retornar o ponteiro para o UIScrollView (retornar myScrollView).
  3. Criei as propriedades do IBOutlet para a visualização na web e a visualização de rolagem - vincule-as no NIB ao seu controlador de visualização.
  4. Na Visualização de rolagem, vá para o Inspetor de atributos, defina os fatores de zoom máximo e mínimo (defino 0,5 a 5,0, que funciona bem).
  5. Na exibição da Web, no Inspetor de atributos:
  6. Na seção Exibição na Web, selecione Escalas de páginas para caber
  7. Na seção Exibir, selecione Modo, "Superior esquerdo"
  8. Na seção Exibir na parte inferior, desative a interação do usuário ativada e o toque múltiplo ativado
Jay Imerman
fonte
3

Com o JavaScript, você pode controlar o nível de zoom, embora a solução que eu encontrei não pareça suave.

Digamos que você tenha <head>:

<meta id="vp" name="viewport" content="width=768,initial-scale=1.0">

Para ampliar para 4x e ainda permitir que o usuário altere o zoom, altere o conteúdo duas vezes:

var vp = document.getElementById('vp');
vp.content = "width=767,minimum-scale=4.0,maximum-scale=4.0,user-scalable=yes";
vp.content = "width=768,minimum-scale=0.25,maximum-scale=10.0,user-scalable=yes";

Alternar a largura é muito importante - caso contrário, o Mobile Safari tem sérios erros de repintura (devido à otimização excessiva).

Você não pode simplesmente definir initial-scalenovamente - ele é ignorado pela segunda vez.

robocat
fonte