Tengo que mostrar un artículo de la web con un UITableView bajo el artículo.

La única opción que encontré fue a mostrar el artículo en un UIWebView en el formato tableview encabezado.

Con el fin de hacer que tengo que llegar a la altura de la webView contenido y tengo que desactivar el desplazamiento para el webView.

He encontrado dos soluciones para desactivar el desplazamiento:

for (id subview in webView.subviews)
    if ([[subview class] isSubclassOfClass: [UIScrollView class]])
        ((UIScrollView *)subview).scrollEnabled=NO;

o en JavaScript:

<script type="text/javascript">
touchMove = function(event) {
    event.preventDefault();
}

He oído que la primera solución es prohibido por la Manzana, pero no tengo ninguna prueba de ello.
Mi solicitud sea rechazada por el uso de esta solución? Si es así, ¿puedo utilizar la segunda solución sin ser rechazado?

InformationsquelleAutor jsaddour | 2011-06-22

18 Comentarios

  1. 293

    Comenzando con iOS5 tenemos acceso directo a la scrollview de la UIWebView.

    Usted puede desactivar el desplazamiento y rebota como este:

    webView.scrollView.scrollEnabled = NO; 
    webView.scrollView.bounces = NO;
    • muchas gracias, eso es exactamente lo que estaba buscando. @jsddour, usted debe marcar esta respuesta aceptada!
    • Por alguna razón, esto no es trabajo para mí. 🙁 He puesto un ScrollView y han puesto un UIWebView en ella. A continuación, establezca el sobre 2 líneas en viewWillAppear método. Pero el pergamino que todavía funciona en la vista web. Alguien puede ayudarme?? Sólo por la información, yo estoy corriendo en iOS 7 simulador.
    • ¿cuál es el uso de webView.scrollView.bounces = NO;? ya que el código en la primera línea se ha deshabilitado el desplazamiento.
    • El amor es cuando la gente tome una respuesta y ejecutar sin tomarse el tiempo para dar el contribuyente un voto. No hay manera de notificar al usuario que elija una respuesta a votar ?
    • para swift webView.scrollView.scrollEnabled = false / webView.scrollView.rebota = false
    • sólo webView.scrollView.scrollEnabled = NO; trabajado para mí, no hay necesidad de implementar webView.scrollView.bounces = NO;
    • Swift 4 versión: webView.scrollView.isScrollEnabled = false

  2. 25

    Ya que la pregunta sigue vigente, hay una nueva manera de hacerlo! (iOS 7.0+, quizás iOS 6, no se ha confirmado)

    webView.scrollView.scrollEnabled = NO;

    Cuidar 🙂

    • Lo que no entiendo es la razón por la que no está en IB :/, cmon MANZANA, ¿qué estás haciendo! Muy bonito solución, sin embargo!
  3. 20

    Puedes configurar la web ver la interacción del usuario propiedad para no decir

    webView.userInteractionEnabled = NO;

    Su muy simple y funciona bien,gracias 🙂

    • Sin embargo, esto evita que los enlaces desde que están siendo explotados.
    • He editado la respuesta con respecto a tu comentario,la amabilidad de revisar y aprobar,gracias 🙂
  4. 12

    para todas las versiones de ios este código se puede utilizar en lugar de setScrollEnabled :

    for (UIView *view in webview.subviews) {
        if ([view isKindOfClass:[UIScrollView class]]) {
           UIScrollView *scrollView = (UIScrollView *)view;
           scrollView.scrollEnabled = NO;
        }
    }
    • en primer lugar, tratar de «setScrollEnabled» método y apple rechazó mi ipa. Luego he cambiado este método y aceptado.
  5. 11

    A utilizar esta <body ontouchmove="event.preventDefault()">

    • Esto también funciona cuando contenteditable=»true». Gracias!
  6. 7

    Creo que el Javascript

    <script type="text/javascript">
    touchMove = function(event) {
        event.preventDefault();
    }

    es lejos la mejor solución.

    De hecho :

    Tu primer ejemplo, o la

    [[[WebView subviews] lastObject] setScrollingEnabled:NO];

    uno (el mismo de las cosas) puede ser rechazada debido a que no se documenta, o hacer bloqueo de la aplicación en una nueva actualización de ios.

    Y la

    [[myWebView scrollView] setBounces:NO];

    método no funciona con iOS < 5.

  7. 5
    [[[WebView subviews] lastObject] setScrollingEnabled:NO];

    que ordena para mí

    • Sería tan malo confiar en esto ya que no está expuesta a la API.
    • [[[WebView subvistas] lastObject] setScrollingEnabled:NO]; que se ordenan para mí. De todos modos, que no responde a mi pregunta. Mi pregunta es que tengo un permiso para hacer eso? Parece que la desactivación de desplazamiento a través del SDK está prohibido. Pero no estoy seguro. ¿Y qué acerca de la desactivación de desplazarse a través de javascript.
    • no hay ninguna evidencia de que mi sugerencia sería provocar un rechazo por parte de apple, de hecho, llamando a la última subiew en el subvistas matriz y la configuración de scrollingEnabled contra la que es expuesto a la API? seguramente?. y sí, ir a por ello causar que usted puede utilizar. ni idea a través de javascript, aunque. lo siento.
    • No, usted no debe hacer esto. Como dice Deepak, no puede confiar en que los indocumentados orden interno de subvistas en uno de Apple elementos de interfaz de usuario. Si cambian la estructura interna en una futura actualización del sistema operativo, la aplicación se bloqueará. Específicamente advertir acerca de ello en varios lugares, y muchas aplicaciones que se rompió en la actualización para el iPhone OS 3.0 sólo porque hicieron esto.
  8. 4

    No creo que la primera opción está prohibido por Apple.

    Usted podría tratar de

    [[[Webview subviews] lastObject] setScrollingEnabled:NO];

    Si no desea que los enlaces a trabajar en su UIWebView, usted también puede hacer

    [myWebView setUserInteractionEnabled:NO];
  9. 3

    He colocado algunos UIWebViews dentro de un UIScrollView y no fue de desplazamiento para mí, a menos que deshabilite la interacción del usuario en el webviews (incluso con el [[webview scrollview] setScrollEnabled:NO]). Así que me coloqué el UIWebViews dentro de un UIView y que trabajó para mí, pero entonces los vínculos interactivos o divs en mi código HTML dentro de la UIWebView no estaban trabajando más.

    Lo único que trabajó para mí es mantener la UIWebView dentro de la UIScrollView por lo que el HTML interacciones a trabajar, pero la UIScrolling no.

    Entonces creé un delegado personalizado para el webviews para escuchar window.open("http:/customEvent") que se llama desde el HTML contenidas en el webview. También he añadido un JavaScript pase de detección que el fuego de mi evento personalizado.

    Cuando el webview delegado recibe esta, yo pase de una notificación a un controlador que dinámicamente se desplaza mi UIScrollView. Obviamente tuve que construir una lógica para supervisar y desplazarse a la página siguiente o anterior. No la más bonita, la solución Es trabajar para mí.

  10. 3

    Intente esto en tu HTML (<HEAD> etiqueta)

    <script> 
      document.ontouchmove = function(event) { event.preventDefault(); }
    </script>

    Se desactivará el desplazamiento en su página web.

    (funciona en cualquier página web, no sólo UIWebView)

  11. 2

    Necesitaba para desactivar el desplazamiento debido a despedir a un teclado personalizado realmente jodido de desplazamiento con el webView. Nada más trabajado y he recurrido a algo como esto:

    -(void)viewDidLoad{
      [super viewDidLoad];
      [self.webView.scrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:nil];
      self.webView.scrollView.showsVerticalScrollIndicator = NO;
    }  
    
    -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
        if (!CGPointEqualToPoint(self.webView.scrollView.contentOffset, CGPointZero)){
            self.contentOffset = CGPointZero;
        }
    }
  12. 1

    Es un UIWebview y un UITableView en un UIScrollview, y el ajuste de la altura de la webview (y sumando el total de ContentSize de la Scrollview) como lo desea?

    • Casi. Pero parece menos complicado para mostrar el WebView en el formato tableview encabezado. Pero mi pregunta Es: soy permitió desactivar webView desplazarse a través de SDK? Si no me permite hacer esto comedero de javascript?
  13. 1
    [[[WebView subviews] lastObject] setScrollingEnabled:NO];
    • funcionará hasta que la actualización donde el desplazamiento de la vista tendría que cambiar

Dejar respuesta

Please enter your comment!
Please enter your name here