iphone - cocoa touch tutorial
¿Cómo evito que UIScrollView rebote horizontalmente? (10)
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 ej., Iniciar un desplazamiento mientras la vista seguía desacelerándose).
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:
scrollView.alwaysBounceHorizontal = NO;
scrollView.directionalLockEnabled = YES;
Lo cual ayuda un poco, pero aún no impide que el usuario pueda arrastrar horizontalmente. Seguramente hay una manera de arreglar esto fácilmente?
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 a la pantalla y el ancho del contenido no es mayor que el ancho de la vista de desplazamiento?
Intenta configurar scrollView.bounces en NO y scrollView.alwaysBounceVertical en YES.
Algo para tener en cuenta: ¿ Sabes que no hay nada más que ver horizontalmente, pero tus usuarios lo sabrán? 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.
Mi versión para webViews, una solución común:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
[webView.scrollView setContentSize: CGSizeMake(webView.frame.size.width, webView.scrollView.contentSize.height)];
}
La casilla de verificación para rebotar verticalmente en storyboard-scrollview simplemente puede ayudar ...
Si una vista se desplaza (y rebota) horizontalmente depende de tres cosas:
- El tamaño del contenido
- Las inserciones de contenido izquierda y derecha
- 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.
Evite los saltos horizontales como los siguientes:
scrollView.contentSize = CGSizeMake(scrollView.frame.size.width - scrollView.contentInset.left - scrollView.contentInset.right, height);
Estoy agregando esta respuesta porque los anteriores no tuvieron en cuenta contentInset.
scrollView.bounces = NO;
Trabajó para mi.
Si alguien que está desarrollando para OS X está buscando aquí, a partir de OS X 10.7, la solución es establecer la propiedad horizontalScrollElasticity en false
/ NO
en la vista de desplazamiento, como esta:
Rápido:
scrollView.horizontalScrollElasticity = false
C objetivo:
scrollView.horizontalScrollElasticity = NO
Eso funciona para mí en Swift:
scrollView.alwaysBounceHorizontal = false
scrollView.bounces = false