¿Alguien sabe cómo evitar que un UIWebView rebote verticalmente? Quiero decir, cuando un usuario toca la pantalla de su iPhone, arrastra su dedo hacia abajo y la vista web muestra un punto en blanco sobre la página web que cargué.
He analizado las siguientes soluciones posibles, pero ninguna de ellas funcionó para mí:
ios
objective-c
iphone
uiscrollview
uiwebview
Brad Parks
fuente
fuente
Respuestas:
... parece funcionar bien.
También será aceptado en la App Store.
Actualización : en iOS 5.x + hay una manera más fácil:
UIWebView
tienescrollView
propiedad, por lo que su código puede verse así:Lo mismo vale para
WKWebView
.fuente
UIWebView
poder llamar a[webView setBounces:NO]
donde quisiera.Estaba mirando un proyecto que facilita la creación de aplicaciones web como aplicaciones instalables completas en el iPhone llamadas QuickConnect , y encontré una solución que funciona, si no quieres que tu pantalla sea desplazable, lo que en mi caso No lo hice
En la publicación de blog / proyecto mencionada anteriormente, mencionan una función de JavaScript que puede agregar para desactivar el rebote, que esencialmente se reduce a esto:
Si desea ver más acerca de cómo lo implementan, simplemente descargue QuickConnect y compruébelo ... Pero, básicamente, todo lo que hace es llamar a ese JavaScript en la carga de la página ... Intenté ponerlo en el encabezado de mi documento, y parece funcionar bien
fuente
Bueno, todo lo que hice para lograr esto es:
Funciona bien para mí ... Además, la respuesta marcada para esta pregunta es una que Apple rechazará si la usa en su aplicación de iPhone.
fuente
UIScrollView
es la primera subvistaUIWebView
que bien podría ser el caso por ahora, pero esto podría cambiar fácilmente en futuras actualizaciones (incluso menores) para iOS o configuraciones particulares. Realmente deberías hacer unafor
iteraciónsubviews
para encontrar elUIScrollView
(realmente no es tanto trabajo y al menos tienes la garantía de obtener un programaUIScrollView
y no bloquearlo ...En el SDK de iOS 5 puede acceder a la vista de desplazamiento asociada con una vista web directamente en lugar de iterar a través de sus subvistas.
Entonces, para deshabilitar el 'rebote' en la vista de desplazamiento, puede usar:
Ver la referencia de clase UIWebView .
(Sin embargo, si necesita admitir versiones del SDK anteriores a 5.0, debe seguir los consejos de Mirek Rusin ).
fuente
Swift 3
fuente
Advertencia. Usé setAllowsRubberBanding: en mi aplicación, y Apple lo rechazó, declarando que las funciones API no públicas no están permitidas (cita: 3.3.1)
fuente
En Swift para deshabilitar los rebotes
fuente
El método de Brad funcionó para mí. Si lo usa, es posible que desee hacerlo un poco más seguro.
Si Apple cambia algo, el rebote volverá, pero al menos su aplicación no se bloqueará.
fuente
En iOS5 solo si planea permitir que los usuarios amplíen el contenido de la vista web (ei: doble toque), la configuración de rebote no es suficiente. También debe establecer las propiedades alwaysBounceHorizontal y alwaysBounceVertical en NO, de lo contrario, cuando se alejan (otro doble toque ...) de forma predeterminada, volverá a rebotar.
fuente
Recorrí la colección de subvistas de UIWebView y configuré sus fondos en [UIColor blackColor], del mismo color que el fondo de la página web. La vista seguirá rebotando pero no mostrará ese feo fondo gris oscuro.
fuente
Me parece que el UIWebView tiene un UIScrollView. Puede usar API documentadas para esto, pero el rebote se establece para ambas direcciones, no individualmente. Esto está en los documentos de la API. UIScrollView tiene una propiedad de rebote, por lo que algo como esto funciona (no sé si hay más de una vista de desplazamiento):
fuente
Me molestó descubrir que UIWebView no es una vista de desplazamiento, así que hice una subclase personalizada para acceder a la vista de desplazamiento de la vista web. Este ejemplo contiene una vista de desplazamiento para que pueda personalizar el comportamiento de su vista web. Los puntos clave de esta clase son:
}
Luego, cuando crea una vista web personalizada, puede deshabilitar el rebote con:
Esta es una excelente forma de uso general para crear una vista web con un comportamiento de desplazamiento personalizable. Solo hay algunas cosas a tener en cuenta:
fuente
Encontré esto en busca de una respuesta y finalmente tuve la suerte de obtener una respuesta propia al jugar. yo hice
Y funcionó.
fuente
Esto funcionó para mí, y maravillosamente también (estoy usando phonegap con webView)
o
fuente
Intenté un enfoque ligeramente diferente para evitar que los objetos UIWebView se desplazaran y rebotaran: agregando un reconocedor de gestos para anular otros gestos.
Parece que UIWebView o su subvista de desplazamiento utiliza su propio reconocedor de gestos panorámicos para detectar el desplazamiento del usuario. Pero de acuerdo con la documentación de Apple, existe una forma legítima de anular un reconocedor de gestos con otro. El protocolo UIGestureRecognizerDelegate tiene un método GestorReconocidor: shouldRecognizeSim simultáneamentelywithGestureRecognizer: - que permite controlar el comportamiento de cualquier reconocedor de gestos en colisión.
Entonces, lo que hice fue
en el método viewDidLoad del controlador de vista:
entonces, el método de anulación de gestos:
Por supuesto, este método delegado puede ser más complejo en una aplicación real: podemos deshabilitar otros reconocedores de forma selectiva, analizar otherGestureRecognizer.view y tomar una decisión en función de qué vista es.
Y, finalmente, en aras de la exhaustividad, el método que registramos como manejador de pan:
puede estar vacío si todo lo que queremos es cancelar el desplazamiento y el rebote de las vistas web, o puede contener nuestro propio código para implementar el tipo de movimientos panorámicos y animaciones que realmente queremos ...
Hasta ahora solo estoy experimentando con todo esto, y parece estar funcionando más o menos como lo quiero. Sin embargo, todavía no he intentado enviar ninguna aplicación a iStore. Pero creo que no he usado nada indocumentado hasta ahora ... Si alguien encuentra lo contrario, infórmeme.
fuente
Aquí hay dos soluciones potenciales más nuevas. Aparentemente, puede usar jqtouch o pastrykit para deshabilitar el desplazamiento. Sin embargo, no tengo estos para trabajar. Podrías ser más competente.
desactivar el desplazamiento vertical
cavando en pastelería
fuente
posicionamiento fijo en safari móvil
Este enlace me ayudó mucho ..... Es fácil ... Hay una demostración ...
fuente
(Ejemplo de Xcode 5 iOS 7 SDK) Aquí hay un ejemplo de aplicación universal que utiliza la función setBounces de scrollview. Es un proyecto / ejemplo de código abierto ubicado aquí: Enlace a SimpleWebView (Ejemplo de código postal del proyecto y código fuente)
fuente
Una de las subvistas de
UIWebView
debería ser aUIScrollView
. Establezca suscrollEnabled
propiedad enNO
y la vista web tendrá el desplazamiento deshabilitado por completo.Nota: técnicamente se trata de una API privada y, por lo tanto, su aplicación podría ser rechazada o bloquearse en futuras versiones del sistema operativo. Uso
@try
yrespondsToSelector
fuente
Mira en la
bounces
propiedad deUIScrollView
. Quoth los documentos de Apple:Asegúrate de estar usando lo correcto
UIScrollView
. No estoy seguro de cómo se ve la jerarquía para unUIWebView
, pero la vista de desplazamiento podría ser un padre, no un hijo, delUIWebView
.fuente
Para deshabilitar el
UIWebView
desplazamiento, puede usar la siguiente línea de código:En este ejemplo,
ObjWebview
es de tipoUIWebView
.fuente
webView.scrollView.scrollEnabled = NO; webView.scrollView.bounces = NO;
fuente