He utilizado UIScrollView antes, y estoy usando ahora, y nunca tuve un problema. Ahora estoy agregando a un viejo de la aplicación, y al mismo tiempo que funciona como se esperaba (me pueden buscar en el contenido, desplazarse con mi dedo, todos los límites y tamaños de configuración a la derecha de modo que no hay espacio vacío en el contenido, etc), Yo simplemente no puede obtener scrollToRectVisible a trabajar. Incluso he simplificado la llamada, de modo que simplemente se mueve a la posición 0,0:

 [scrollView scrollRectToVisible:CGRectMake(0, 0, 10, 10) animated:YES];

o mover a 0,200:

 [scrollView scrollRectToVisible:CGRectMake(0, 200, 10, 10) animated:YES];

Incluso hice una rápida aplicación para probar esto y me puede conseguir scrollRectToVisible a trabajar allí como yo esperaba. Pero en mi edad, app, me parece que no puede hacer nada.

Me puede hacer el scrollView de desplazamiento con setContentOffset:, pero eso no es lo que quiero.

Este scrollView y sus contenidos están definidos en la punta del IB y se utiliza con un IBOutlet. El único código que estoy utilizando en mi app para controlar el scrollView es

 [scrollView setContentSize:CGSizeMake(scrollView.contentSize.width, imageView.frame.size.height)];

(Sólo estoy interesado en el desplazamiento vertical no horizontal).

Alguien ha de ejecutar en un problema como este?

He comparado el scrollView atributos, tanto en aplicaciones y son idénticos.

ANEXO:

Mi scrollViews marco es: 0.000000 0.000000 480.000000 179.000000

Mi scrollViews contentSize es: 0.000000 324.000000

Todavía actúa como el rect quiero desplázate ya es visible y no desplazamiento es necesario. No sé si esto es lo que está sucediendo. Esto es sólo el darnest cosa. Parece una cosa fácil de resolver…

ANEXO #2:

Esta es la forma en que estoy haciendo hacer sin scrollRectToVisible:

CGPoint point = myRect.origin;
if (![clefScrollView pointInside:point withEvent:nil]) {
    point.x = 0;
    if (point.y > clefScrollView.contentSize.height - clefScrollView.bounds.size.height)
        point.y = clefScrollView.contentSize.height - clefScrollView.bounds.size.height;
    [clefScrollView setContentOffset:point animated: YES];
}

Todo lo demás acerca de este scrollView funciona como se esperaba, pero scrollRectToVisible. Por QUÉ?!? Cualquier suposiciones salvajes?

InformationsquelleAutor mahboudz | 2009-09-18

8 Comentarios

  1. 113

    Más de un mes más tarde, y finalmente lo entendí. Mientras que la alternativa anterior funcionado bien, se ha me ha estado molestando y finalmente tuve que averiguar. Resulta que se trataba de algo de un error estúpido.

    Aquí el viejo código en mi viewDidLoad, donde puedo configurar el scrollView:

    [clefScrollView setContentSize:CGSizeMake(clefScrollView.contentSize.width, clefView.frame.size.height)];

    El valor de un scrollView la altura o el ancho no puede ser 0! Creo que esto tiene más allá de mí, porque yo estaba asumiendo que ScrollView tamaños de empezar con un tamaño válido, y me faltaba el hecho de que una dimensión de cero!!!

    Esto funciona:

    [clefScrollView setContentSize:CGSizeMake(clefView.frame.size.width, clefView.frame.size.height)];

    La esperanza de que esto ayude a alguien por ahí. Definitivamente me pasó demasiado tiempo tratando de depurar este.

    • buen trabajo de detective, mahboudz. fwiw, sospecho que el problema no es, precisamente, que el ScrollView no puede tener una dimensión de tamaño cero, sino que debe ser lo suficientemente grande para contener la solicitada rectángulo ! saludos, Orion
    • Gracias! Tengo poco por esta demasiado (yo estaba ajuste de la altura, pero no ancho).
    • Esto NO es del todo correcto – c.f. Orión, la respuesta de abajo (yo tenía un no-cero anchura/altura, no es ‘0’ que causa el problema…)
    • TAMBIÉN hay que tener en cuenta que si establece la «zoomScale» esto cambia el «contentSize» de la scrollview – un poco sorprendente, pero esa es la forma en que funciona. Así que … si se aleja, y escalar a la parte inferior o a la derecha de su «contentSize», silenciosamente, un error porque el ACTUAL contentSize ahora es más pequeña…
    • He hecho esto en manera similar, pero todavía scrollRectToVisible no está funcionando. Su trabajo en el simulador, pero no en el dispositivo. Por favor, ayudar.
    • Desea establecer 1 en lugar de 0. Ajuste de la altura, a veces te golpean en la cara, con lo que el contenido de tamaño más grande de lo que realmente necesita (suponiendo que no es en virtud de la parte superior/inferior de barras).
    • Me estaba volviendo loco! Un millón de gracias 😉
    • GRACIAS!! Mi problema era con diseño auto – contentSize ancho de 0. Si usted tiene este problema, es porque no lo ponga todo su contenido dentro de un contentView dentro de desplazamiento de la vista: spin.atomicobject.com/2014/03/05/uiscrollview-autolayout-ios Si usted no quiere hacer eso (lo que significa que volver a hacer todo de las restricciones), usted puede agregar un 0-altura de la vista en el interior de su desplazamiento de la vista, establecer líder, a la cola, y el borde superior restricciones a que desplazarse a ver a 0, agregar restricción de altura por 0 y, a continuación, agregar la igualdad de ancho de restricción entre el desplazamiento de la vista y el 0-altura de la vista. Sí, es extraño, pero funciona.

  2. 47

    Sí, no he tenido éxito con scrollRectToVisible:animated:, pero setContentOffset:animated: siempre funciona para mí. Por curiosidad, ¿por qué usted no desea utilizar setContentOffset:animated:? Parece ser la solución adecuada.

    • Por desgracia, setContentOffset se desplazará hasta el punto de que, independientemente de si ya está visible o no. Yo podría hacer el trabajo extra de determinar si el punto es visible o no, sin embargo, todavía estoy curioso por qué scrollRectToVisible no funciona, cuando la veo trabajo en mi propio ejemplo y otras muestras en la red. Debo de estar haciendo algo mal, pero con sólo tres o cuatro líneas de código para el scrollView, yo no puedo ver ¿qué?!
  3. 5

    Es posible que desee comprobar y ver que el scrollView del delaysContentTouches se establece la propiedad NO.

    Si se llama al método scrollRectToVisible o setContentOffset de un contacto dentro de una subvista de su scrollView, a continuación, su scrollView podría ser la celebración de las cosas por retrasar toca.

    Así, asegúrese de que establece lo siguiente en su scrollView.

    scrollView.delaysContentTouches = NO;

    Lo más probable es ser capaz de mover el scrollView con y sin set de animación para SÍ.

  4. 1

    yo lo tenía como este y no el trabajo

    scrollView.contentSize = CGSizeMake(scrollView.contentSize.width, someKnownValue);

    sólo estaba cambiando la altura de la contentSize, así que no pensé que me iba a dar ningún problema, pero lo hizo …

    tuvo que cambiar a este

    scrollView.contentSize = CGSizeMake(someOtherKnownValue, someKnownValue);

    resulta scrollView.contentSize.width no es necesariamente ajustado a un valor válido desde el ir, así que mejor darle un valor específico

  5. 0

    La solución que se sugiere más arriba todavía puede dar un error si no ha configurado el marco de la «clefScrollView».

    Si la solución anterior es utilizado y sigue teniendo el mismo problema, asegúrese de que usted ha inicializado su scollView (en este caso clefScrollView) marco anterior a la configuración de la vista del contenido.

    
    
        clefScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,320,450)];
    
        [clefScrollView setContentSize:CGSizeMake(clefView.frame.size.width, clefView.frame.size.height)];
    
    
    
  6. 0

    Un poco tarde para el juego, pero yo estaba teniendo el mismo problema. A pesar de que me había absolutamente mi scrollview contenido del tamaño establecido correctamente – incluso demasiado para el valor de la altura. Incluso después de extensas comprobaciones para validar los marcos y el contenido de los tamaños – todavía no estaba trabajando. Tuve que ajustar el «límites» de marco altura, todo funcionó de maravilla.

  7. 0

    Yo tenía los mismos síntomas, ya que esta cuestión..el scrollRectToVisible no estaba funcionando como se pretendía. Mi problema era que el scrollview en el guión había una ambigua restricción problema. Una vez que se ha corregido la llamada funcionado bien. Otra cosa es saber cuando la scrollRectToVisible llamada no está funcionando según lo previsto.

  8. 0

    Para mí, el problema fue que una restricción en una subvista no fue explícito.
    Compruebe que cada restricción en su contenido se establece, incluso si usted no la necesitan, al parecer por el diseño.

Dejar respuesta

Please enter your comment!
Please enter your name here