2008-10-06 15 views
11

Tengo un UIScrollView que muestra datos verticales, pero donde el componente horizontal no es más ancho que la pantalla del iPhone. El problema es que el usuario todavía puede arrastrar horizontalmente y, básicamente, exponer secciones en blanco de la interfaz de usuario. He intentado configurar:¿Cómo evito que UIScrollView rebote horizontalmente?

scrollView.alwaysBounceHorizontal = NO; 
scrollView.directionalLockEnabled = YES; 

Lo que ayuda un poco, pero aún no impide que el usuario pueda arrastrar horizontalmente. Seguramente hay una manera de arreglar esto fácilmente?

Respuesta

14

Eso es extraño, porque cada vez que creo una vista de desplazamiento con marco y tamaño de contenido dentro de los límites de la pantalla en cualquier dimensión, la vista de desplazamiento no se desplaza (ni rebota) en esa dirección.

// Should scroll vertically but not horizontally 
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)]; 
scrollView.contentSize = CGSizeMake(320, 1000); 

¿Estás seguro de que el marco se ajusta completamente dentro de la pantalla y el ancho de contentSize no es mayor que la anchura de la vista de desplazamiento?

+0

Tuve el scrollView.contentSize equivocado ... ¡gracias! – rustyshelf

6

Intente configurar scrollView.bounces en NO y scrollView.alwaysBounceVertical en YES.

+2

Eso está a medio camino, ahora se desplaza verticalmente, pero nunca horizontalmente, pero ya no rebota verticalmente ... sería bueno si todavía pudiera rebotar verticalmente, ya que parece poco natural desplazarse sin ese rebote en el iPhone. – rustyshelf

+0

@rustyshelf Sé que es un poco tarde, pero además de la respuesta de Darron, también hago 'scrollView. direccionalLockEnabled = SÍ' – hyd00

1

Asegúrate de que UIScrollView contentSize no sea más ancho que UIScrollView. En mis propias aplicaciones, esto fue suficiente para evitar el desplazamiento horizontal, excepto en los casos en que me volví realmente loco al deslizar en direcciones aleatorias (por ejemplo, iniciar un desplazamiento mientras la vista seguía desacelerándose).

1

Algo a tener en cuenta: Usted sabe que no hay nada más que ver horizontalmente, pero ¿lo sabrán sus usuarios? Es posible que desee un pequeño rebote horizontal, incluso si no hay contenido adicional para mostrar horizontalmente. Esto permite que el usuario sepa que sus intentos de desplazarse horizontalmente no se ignoran, simplemente no hay nada que puedan ver. Pero, sí, a menudo realmente no quieres el rebote.

0

Mi versión de webviews, una solución común:

- (void)webViewDidFinishLoad:(UIWebView *)webView { 

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

} 
2

si o no una vista rollos (y rebotes) depende horizontalmente en tres cosas:

  • El tamaño del contenido
  • La izquierda y contenido correcto inserta
  • El ancho de la vista de desplazamiento -

Si la vista de desplazamiento puede ajustarse al tamaño del contenido más las inserciones, entonces no se desplaza ni rebota.

evitar que reboten horizontal de este modo:

scrollView.contentSize = CGSizeMake(scrollView.frame.size.width - scrollView.contentInset.left - scrollView.contentInset.right, height); 

añado esta respuesta porque los anteriores no tomaron en cuenta contentInset.

6

La casilla de verificación de rebote vertical en el guión gráfico-ScrollView simplemente puede ayudar ...

enter image description here

17
scrollView.bounces = NO; 

trabajado para mí.

0

Si alguien está desarrollando para OS X está buscando aquí, a partir de OS X 10.7, la solución es establecer la propiedad horizontalScrollElasticity a false/NO en la vista de desplazamiento, así:

Swift:

scrollView.horizontalScrollElasticity = false 

Objective-C:

scrollView.horizontalScrollElasticity = NO 
4

que funciona para mí en Swift:

scrollView.alwaysBounceHorizontal = false 
scrollView.bounces = false 
Cuestiones relacionadas