iphone - doesn - Desactivar el desplazamiento vertical en UIScrollView
scrollview xcode 9 (9)
Actualicé el tamaño del contenido para deshabilitar el desplazamiento vertical, y la capacidad para desplazarme permaneció. Luego me di cuenta de que necesitaba desactivar el rebote vertical también, para desactivar completamente el desplazamiento.
Tal vez haya personas con este problema también.
Hay una opción en IB para desmarcar el desplazamiento vertical en una vista de desplazamiento, pero parece que no funciona.
¿Cómo se puede configurar scrollview para que se desplace horizontalmente y no verticalmente en el código en lugar de IB?
Debe pasar 0 en el tamaño del contenido para deshabilitar en la dirección que desee.
Para deshabilitar el desplazamiento vertical
scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,0);
Para deshabilitar el desplazamiento horizontal
scrollView.contentSize = CGSizeMake(0,scrollView.contentSize.height);
En iOS 11, recuerde agregar lo siguiente, si está interesado en crear una vista de desplazamiento que se adhiera a los límites de la pantalla en lugar de a un área segura .:
if (@available(iOS 11.0, *)) {
[self.scrollView setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever];
}
Incluye el siguiente método
-(void)viewDidLayoutSubviews{
self.automaticallyAdjustsScrollViewInsets = NO;
}
y establecer el ancho del tamaño del contenido de la vista de desplazamiento igual al ancho de la vista de desplazamiento.
Intenta establecer la altura del tamaño del contenido en la altura del scrollView. Entonces, el desplazamiento vertical debería estar desactivado porque no habría nada para desplazarse verticalmente.
scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,scrollView.frame.size.height);
Solo configure la y para estar siempre en la parte superior. Necesidad de cumplir con UIScrollViewDelegate
func scrollViewDidScroll(scrollView: UIScrollView) {
scrollView.contentOffset.y = 0.0
}
Esto mantendrá el efecto Deceleración / Aceleración del desplazamiento.
desde iOS7:
primero: el ancho del tamaño del contenido debe ser igual al ancho de su vista de desplazamiento
segundo: en su initWithNibName:
self.automaticallyAdjustsScrollViewInsets = NO;
Eso es.
sí, la respuesta de pt2ph8 es correcta,
pero si por alguna extraña razón su contentSize debe ser más alto que UIScrollView, puede desactivar el desplazamiento vertical implementando el método de protocolo UIScrollView
-(void)scrollViewDidScroll:(UIScrollView *)aScrollView;
solo agregue esto en su UIViewController
float oldY; // here or better in .h interface
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
[aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x, oldY)];
// or if you are sure you wanna it always on top:
// [aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x, 0)];
}
es simplemente el método que se utiliza cuando el usuario desplaza su UIScrollView, y al hacerlo fuerza que el contenido tenga siempre el mismo .y
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
[aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x,0)];
}
debes haber confirmado a UIScrollViewDelegate
aScrollView.delegate = self;