Hay una opción en IB para desmarcar el desplazamiento vertical en una vista de desplazamiento, pero no parece funcionar.
¿Cómo se puede configurar la vista de desplazamiento para que solo se desplace horizontalmente y no verticalmente en el código en lugar de IB?
iphone
ios
uiscrollview
sistema
fuente
fuente
Respuestas:
Intente establecer la altura de contentSize a la altura de scrollView. Entonces el desplazamiento vertical debería estar deshabilitado porque no habría nada para desplazarse verticalmente.
scrollView.contentSize = CGSizeMake(scrollView.contentSize.width,scrollView.frame.size.height);
fuente
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.
fuente
sí, la respuesta de pt2ph8 es correcta,
pero si por alguna extraña razón su contentSize debería ser mayor que el UIScrollView, puede deshabilitar el desplazamiento vertical implementando el método del 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 solo el método llamado cuando el usuario desplaza su UIScrollView, y al hacerlo, fuerza el contenido a tener siempre el mismo .y
fuente
float oldY;
consulte el código anterior. Ese es un símbolo de variable de estilo C para cada aplicación, la variable DEBE declararse como un miembro de instancia de la clase de controlador.Incluya el siguiente método
-(void)viewDidLayoutSubviews{ self.automaticallyAdjustsScrollViewInsets = NO; }
y establezca el ancho del tamaño del contenido de la vista de desplazamiento igual al ancho de la vista de desplazamiento.
fuente
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);
fuente
Actualicé el tamaño del contenido para deshabilitar el desplazamiento vertical y la capacidad de desplazamiento aún permanecía. Luego me di cuenta de que también necesitaba deshabilitar el rebote vertical, para deshabilitar completamente el desplazamiento.
Quizás también haya personas con este problema.
fuente
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView { [aScrollView setContentOffset: CGPointMake(aScrollView.contentOffset.x,0)]; }
debes haber confirmado
UIScrollViewDelegate
aScrollView.delegate = self;
fuente
Simplemente configure la y para que esté siempre arriba. Necesita cumplir con UIScrollViewDelegate
func scrollViewDidScroll(scrollView: UIScrollView) { scrollView.contentOffset.y = 0.0 }
Esto mantendrá el efecto de desaceleración / aceleración del desplazamiento.
fuente
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 un área segura:
if (@available(iOS 11.0, *)) { [self.scrollView setContentInsetAdjustmentBehavior:UIScrollViewContentInsetAdjustmentNever]; }
fuente
Desde iOS11 se puede utilizar la siguiente propiedad
let frameLayoutGuide: UILayoutGuide
Si establece restricciones para frameLayoutGuide.topAnchor y frameLayoutGuide.bottomAnchor a los mismos anclajes de alguna subvista de su scrollView , el desplazamiento vertical se desactivará y la altura de scrollView será igual a la altura de su subvista.
fuente
La solución más obvia es prohibir los cambios de coordenadas y en su subclase.
override var contentOffset: CGPoint { get { return super.contentOffset } set { super.contentOffset = CGPoint(x: newValue.x, y: 0) } }
Ésta es la única solución adecuada en situaciones en las que:
fuente
Muchas respuestas incluyen establecer el
contentOffset
en 0. Tuve un caso en el que quería que la vista dentro de scrollView estuviera centrada. Esto hizo el trabajo por mí:public func scrollViewDidScroll(_ scrollView: UIScrollView) { scrollView.contentOffset.y = -scrollView.contentInset.top }
fuente