2009-05-26 19 views
8

No lo he intentado todavía, pero supongo que tendré que deshabilitar el desplazamiento de la vista de desplazamiento principal tan pronto como sepa que el usuario querrá desplazarse en la vista de desplazamiento secundario, ¿verdad?¿Cómo puedo anidar un UIScrollView dentro de UIScrollView para que el usuario pueda desplazar el UIScrollView interno?

Ambas vistas de desplazamiento se desplazan horizontalmente.

¿Cómo podría desactivar temporalmente la detección de desplazamiento del elemento primario? ¿O hay alguna otra manera?

Respuesta

9

UIScrollView tiene una propiedad llamada scrollEnabled, que puede establecer en NO para deshabilitar el desplazamiento en la vista de desplazamiento principal.

No lo he intentado todavía, pero puede encontrar que Lo correcto, es decir, la vista de desplazamiento interior se desplaza hasta que ya no se puede desplazar, en cuyo punto se desplaza la vista de desplazamiento exterior.

+0

Hola hatfinch, me pregunto cómo podría evitar el comportamiento predeterminado "la vista de desplazamiento interior se desplaza hasta que ya no pueda desplazarse, en cuyo punto se desplaza la vista de desplazamiento exterior"? Deseo que cuando el usuario se desplaza por la vista interna, la vista externa permanezca, incluso si la vista interna se desplaza hasta el final. – Hampotato

+0

Puede registrarse para devoluciones de llamadas de delegado en la vista de desplazamiento interior, deshabilitar el desplazamiento en la vista de desplazamiento externo cuando el interno comienza a desplazarse, y volver a habilitarlo cuando el interno ha terminado de desacelerar. – hatfinch

+0

Ya veo, muchas gracias! – Hampotato

0

Yo lo hice y que tenga como consecuencia el padre ScrollView NO para desplazarse ya que está muy bien, pero mi hijo ScrollView que fue empujado a través de presentModalViewController sigue sin responder a desplazarse eventos (por ejemplo, el desplazamiento hacia arriba o hacia abajo). Obviamente me falta algo ...

EDIT: Tengo que trabajar finalmente mediante el uso de 'scrollEnabled' en la vista principal. Gracias.

0

tenía este mismo problema hasta que me puse lo suficientemente dinámica altura a la contentSize del ScrollView interno, usando:

[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width,600)]; 

Obviamente esto es sólo un ejemplo codificado, debe ajustar la altura necesaria para mostrar el conjunto contenido de la vista, y tal vez no se necesita desplazamiento al final.

Parece que ajustar la altura de la vista de desplazamiento utilizando el IBuilder no es suficiente, por lo que no se necesita desplazamiento y es por eso que estaba pensando que el evento de barrido no estaba llegando al desplazamiento interno.

Espero que esto ayude!

1

Es muy posible. La forma más fácil es deshabilitar la propiedad scrollEnabled, también puede intentar establecer el UIScrollView externo a sus límites, para que no se desplace. Dependiendo de lo que necesite, puede configurar No a bounce también, pero eso básicamente hará que su vista de desplazamiento sea como una UIView normal.

Si usted tiene control sobre todo el niño UIScrollView 's, se puede implementar UIScrollViewDelegate protocolo, pero si no lo hace, o su hijo UIScrollView es realmente un UITableView, o UICollectionView, entonces realmente no se puede depender del UIScrollViewDelegate protocolo, pero recuerda UIScrollView viene con un panGestureRecognizer y puedes jugar con eso. Una manera poderosa pero pesada es agregar un observador en la propiedad panGestureRecognizer de state para que pueda capturar todos los eventos sin ser el delegado del UIScrollView en cuestión.

Cuestiones relacionadas