scrolling not how guy iphone uiscrollview

iphone - not - scrollview in swift 3



UIScrollView funciona como se esperaba, pero scrollRectToVisible: no hace nada (7)

He usado UIScrollView antes, y lo estoy usando ahora, y nunca tuve un problema. Ahora lo estoy agregando a una aplicación anterior, y aunque funciona como se esperaba (puedo mirar el contenido, desplazarme con el dedo, todos los límites y tamaños están configurados correctamente, por lo que no hay espacio vacío en el contenido, etc. .), Simplemente no puedo hacer que scrollToRectVisible funcione. Incluso he simplificado la llamada para que simplemente se mueva a la posición 0,0:

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

o moverlo a 0,200:

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

Incluso hice una aplicación rápida para probar esto y puedo hacer que scrollRectToVisible funcione allí como yo esperaba. Pero en mi aplicación anterior, parece que no puedo hacer nada.

Puedo hacer que scrollView se desplace con setContentOffset: pero eso no es lo que quiero.

Este scrollView y su contenido están definidos en la punta por IB y se usan con una IBOutlet. El único código que estoy usando en mi aplicación para manejar el scrollView es

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

(Solo me interesa el desplazamiento vertical no horizontal).

¿Alguien ha tenido un problema como este?

He comparado los atributos scrollView en ambas aplicaciones y son idénticos.

APÉNDICE:

Mi marco scrollViews es: 0.000000 0.000000 480.000000 179.000000

Mi scrollViews contentSize es: 0.000000 324.000000

Todavía funciona como el rect que quiero desplazar a ya es visible y no se necesita desplazamiento. No estoy seguro de si eso es lo que está sucediendo. Esto es solo lo más desagradable. Parece algo tan fácil de resolver ...

ADDENDUM # 2:

Así es como me las scrollRectToVisible 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 sobre este scrollView funciona como se esperaba, pero scrollRectToVisible . ¿¡¿POR QUÉ?!? ¿Alguna suposición salvaje?


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


La solución sugerida anteriormente aún puede dar un error si no ha configurado el marco para el "clefScrollView".

Si se utiliza la solución anterior y sigue teniendo el mismo problema, asegúrese de haber inicializado su marco scollView (en este caso clefScrollView) antes de configurar la vista de contenido.

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


Más de un mes después, y finalmente lo descubrí. Si bien la alternativa anterior funcionó bien, me ha estado molestando y finalmente tuve que resolverlo. Resulta que fue un error algo estúpido.

Este es el código anterior en mi viewDidLoad, donde configuré scrollView:

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

¡El valor de una altura o ancho de scrollView no puede ser 0! Creo que esto me pasó porque estaba asumiendo que los tamaños de ScrollView comienzan con un tamaño válido, ¡y me faltaba el hecho de que una dimensión era cero!

Esto funciona:

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

Espero que esto ayude a alguien por ahí. Definitivamente, pasé demasiado tiempo intentando depurar esto.


Lo tuve así y no funcionó

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

Estaba cambiando la altura del contentSize , así que no pensé que eso me daría ningún problema, pero lo hizo ...

tuvo que cambiarlo a esto

scrollView.contentSize = CGSizeMake(someOtherKnownValue, someKnownValue);

resulta que scrollView.contentSize.width no está necesariamente establecido en un valor válido desde el scrollView.contentSize.width , así que mejor darle un valor específico


Es posible que desee comprobar y ver que la propiedad delaysContentTouches de delaysContentTouches está establecida en NO .

Si llama al método scrollRectToVisible o setContentOffset desde un toque dentro de una subvista de su scrollView, su scrollView podría estar conteniendo cosas al retrasar toques.

Por lo tanto, asegúrese de configurar lo siguiente en su scrollView.

scrollView.delaysContentTouches = NO;

Lo más probable es que pueda mover el scrollView con y sin animación establecida en SÍ.


Un poco tarde para el juego, pero estaba teniendo el mismo problema. Aunque tenía absolutamente el tamaño de contenido de mi scrollview configurado correctamente, incluso en exceso para el valor de altura. Incluso después de exhaustivas comprobaciones para validar los marcos y el tamaño del contenido, todavía no funcionaba. Tuve que ajustar la altura del cuadro "límites", luego todo funcionó muy bien.


Tenía los mismos síntomas que este problema ... el scrollRectToVisible no funcionaba como estaba previsto. Mi problema era que la vista de desplazamiento en el guión gráfico tenía un problema de restricción ambiguo. Una vez que se arregló, la llamada funcionó bien. Otra cosa es verificar cuando la llamada scrollRectToVisible no funciona como se esperaba.