Alguém sabe como impedir que um UIWebView salte verticalmente? Quero dizer, quando um usuário toca na tela do iPhone, arrasta o dedo para baixo e a visualização na Web mostra um espaço em branco acima da página da Web que eu carreguei?
Analisei as seguintes soluções possíveis, mas nenhuma delas funcionou para mim:
http://forums.macrumors.com/showthread.php?t=619534
Como faço para impedir que um UIScrollView salte horizontalmente?
ios
objective-c
iphone
uiscrollview
uiwebview
Brad Parks
fonte
fonte
Respostas:
... parece funcionar bem.
Também será aceito na App Store.
Atualização : no iOS 5.x +, há uma maneira mais fácil -
UIWebView
possuiscrollView
propriedade, portanto seu código pode ficar assim:O mesmo vale para
WKWebView
.fonte
UIWebView
poder ligar para[webView setBounces:NO]
qualquer lugar que quisesse.Eu estava olhando para um projeto que facilita a criação de aplicativos da Web como aplicativos instaláveis completos no iPhone, chamado QuickConnect , e encontrei uma solução que funciona, se você não deseja que sua tela seja rolável, o que, no meu caso, Eu não fiz.
Na postagem do projeto / blog acima mencionada, eles mencionam uma função javascript que você pode adicionar para desativar a rejeição, que basicamente se resume a isso:
Se você quiser saber mais sobre como eles o implementam, basta fazer o download do QuickConnect e verificá-lo .... Mas basicamente tudo o que faz é chamar esse javascript no carregamento da página ... Tentei colocá-lo no cabeçalho do meu documento, e parece funcionar bem.
fonte
Bem, tudo o que fiz para fazer isso é:
Funciona bem para mim ... Além disso, a resposta marcada para esta pergunta é uma que a Apple rejeitará se você a usar no seu aplicativo para iPhone.
fonte
UIScrollView
é a primeira subvisãoUIWebView
que pode ser o caso por enquanto, mas isso pode mudar facilmente em futuras atualizações (até menores) do iOS ou em configurações específicas. Você realmente deve fazer umafor
iteração sobresubviews
a realmente encontrar oUIScrollView
(ele realmente não é que muito trabalho e, pelo menos, você está garantido para obter umUIScrollView
e não travar o seu programa ...No iOS 5 SDK, você pode acessar diretamente a visualização de rolagem associada a uma visualização da Web, em vez de iterar pelas subvisões.
Portanto, para desativar o 'salto' na exibição de rolagem, você pode usar:
Consulte a Referência da classe UIWebView .
(No entanto, se você precisar oferecer suporte a versões do SDK anteriores à 5.0, siga as orientações de Mirek Rusin .)
fonte
Swift 3
fonte
Aviso. Usei setAllowsRubberBanding: no meu aplicativo e a Apple o rejeitou, afirmando que funções de API não públicas não são permitidas (citação: 3.3.1)
fonte
Em Swift para desativar os saltos
fonte
O método de Brad funcionou para mim. Se você usá-lo, você pode querer torná-lo um pouco mais seguro.
Se a Apple mudar alguma coisa, o retorno retornará - mas pelo menos o seu aplicativo não falhará.
fonte
No iOS5, apenas se você planeja permitir que os usuários ampliem o conteúdo da visualização na web (ei: toque duas vezes), a configuração de rejeição não é suficiente. Você também deve definir as propriedades alwaysBounceHorizontal e alwaysBounceVertical como NO; caso contrário, quando reduzirem o zoom (outro toque duplo ...), o padrão será o retorno novamente.
fonte
Percorri a coleção de subvisões do UIWebView e defina seus planos de fundo como [UIColor blackColor], a mesma cor do plano de fundo da página da web. A vista ainda será refletida, mas não mostrará esse fundo cinza escuro feio.
fonte
Parece-me que o UIWebView tem um UIScrollView. Você pode usar APIs documentadas para isso, mas o salto é definido para as duas direções, não individualmente. Isso está nos documentos da API. O UIScrollView tem uma propriedade de rejeição, então algo assim funciona (não sei se há mais de uma visualização de rolagem):
fonte
Fiquei aborrecido ao descobrir que o UIWebView não é uma exibição de rolagem, então criei uma subclasse personalizada para acessar a exibição de rolagem da exibição na web. Essa subclasse contém uma visualização de rolagem para que você possa personalizar o comportamento da sua visualização na web. Os punchlines desta classe são:
}
Em seguida, ao criar uma exibição na web personalizada, você pode desativar o salto com:
Essa é uma ótima maneira de finalidade geral de fazer uma exibição na Web com comportamento de rolagem personalizável. Há algumas coisas a serem observadas:
fonte
Me deparei com isso em busca de uma resposta e, eventualmente, eu apenas tive sorte com uma resposta minha, brincando. eu fiz
e funcionou.
fonte
Isso funcionou para mim e muito bem (estou usando o phonegap com o webView)
ou
fonte
Tentei uma abordagem ligeiramente diferente para impedir que os objetos UIWebView rolassem e pulassem: adicionando um reconhecedor de gestos para substituir outros gestos.
Parece que o UIWebView ou sua subvisualização de rolagem usa seu próprio reconhecedor de gesto de panorâmica para detectar a rolagem do usuário. Mas, de acordo com a documentação da Apple, existe uma maneira legítima de substituir um reconhecedor de gestos por outro. O protocolo UIGestureRecognizerDelegate possui um método gestRecognizer: shouldRecognizeSimultaneamenteWithGestureRecognizer: - que permite controlar o comportamento de qualquer reconhecedor de gestos em colisão.
Então, o que eu fiz foi
no método viewDidLoad do controlador de exibição:
então, o gesto substitui o método:
Obviamente, esse método delegado pode me tornar mais complexo em um aplicativo real - podemos desativar outros reconhecedores seletivamente, analisando otherGestureRecognizer.view e tomando decisões com base em qual é a visão.
E, finalmente, por uma questão de integridade, o método que registramos como manipulador de pan:
pode estar vazio se tudo o que queremos é cancelar a rolagem e a rejeição das visualizações da web, ou pode conter nosso próprio código para implementar o tipo de movimentos e animações de pan que realmente queremos ...
Até agora, estou apenas experimentando todas essas coisas, e parece estar funcionando mais ou menos como eu quero. Ainda não tentei enviar aplicativos para o iStore. Mas acredito que não usei nada não documentado até agora ... Se alguém achar o contrário, informe-me.
fonte
Aqui estão duas novas soluções em potencial. Aparentemente, você pode usar o jqtouch ou o pastrykit para desativar a rolagem. No entanto, eu não tenho esses para trabalhar. Você pode ser mais competente.
desativando a rolagem vertical
cavando em pastrykit
fonte
posicionamento fixo no safari móvel
Esse link me ajudou muito ..... É fácil .. Existe uma demonstração ..
fonte
(Exemplo do Xcode 5 iOS 7 SDK) Aqui está um exemplo do Universal App usando a função scrollview setBounces. É um projeto / exemplo de código aberto localizado aqui: Link para SimpleWebView (exemplo de código de projeto e código-fonte)
fonte
Uma das subvisões de
UIWebView
deve ser aUIScrollView
. Defina suascrollEnabled
propriedade comoNO
e a exibição na Web terá a rolagem totalmente desativada.Nota: isso é tecnicamente usando uma API privada e, portanto, seu aplicativo pode ser rejeitado ou travar em versões futuras do sistema operacional. Use
@try
erespondsToSelector
fonte
Olhe para a
bounces
propriedade deUIScrollView
. Os documentos da Apple:Verifique se você está usando o direito
UIScrollView
. Não sei como é a hierarquia para umUIWebView
, mas a exibição de rolagem pode ser um pai, não um filho, doUIWebView
.fonte
Para desativar a
UIWebView
rolagem, você pode usar a seguinte linha de código:Neste exemplo,
ObjWebview
é do tipoUIWebView
.fonte
webView.scrollView.scrollEnabled = NÃO; webView.scrollView.bounces = NÃO;
fonte