Pregunta ¿Cómo deshabilitar el desplazamiento horizontal de UIScrollView?


tengo un UIView como Springboard de iPhone. Lo he creado usando un UIScrollView y UIButtons. Quiero deshabilitar el desplazamiento horizontal en dicha vista de desplazamiento. Solo quiero desplazamiento vertical. ¿Cómo logro esto?


74
2018-06-30 09:29


origen


Respuestas:


Tienes que configurar el contentSize propiedad de la UIScrollView. Por ejemplo, si tu UIScrollView tiene 320 píxeles de ancho (el ancho de la pantalla), entonces podrías hacer esto:

CGSize scrollableSize = CGSizeMake(320, myScrollableHeight);
[myScrollView setContentSize:scrollableSize];

los UIScrollView solo se desplazará verticalmente, porque ya puede mostrar todo de forma horizontal.


111
2018-06-30 16:31



ACTUALIZADO: (Después de que @EranMarom señaló su comentario)

Usted puede detener el desplazamiento horizontal o desplazamiento vertical en el ScrollViewDelegate Método. Aquí es cómo,

Detiene el desplazamiento horizontal:

Si desea desplazarse horizontalmente, entonces necesita aumentar el contentOffset.x. La prevención de eso detiene el scrollview scroll en dirección horizontal.

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    sender.contentOffset.x = 0.0
}

Detiene el desplazamiento vertical:

Si quieres desplazarte verticalmente, entonces necesitas aumentar el contentOffset.y. La prevención de eso detiene el scrollview scroll en dirección vertical.

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    sender.contentOffset.y = 0.0
}

El código anterior evita los cambios en x y y de un scrollview contentOffset y lleva a detener el desplazamiento en scrollViewDidScroll: método.


80
2018-06-09 12:08



desde el uso de iOS7

self.automaticallyAdjustsScrollViewInsets = NO;

// y crea tu desplazamiento de página con 3 páginas

    self.pageView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    [self.pageView setContentSize:CGSizeMake(self.view.frame.size.width*3, self.view.frame.size.height)];
    [self.pageView setShowsVerticalScrollIndicator:NO];
    [self.pageView setPagingEnabled:YES];
    [self.view addSubview:self.pageView];

10
2018-01-22 10:45



Solución Swift

Cree dos puntos de venta, uno para su vista y otro para su vista de desplazamiento:

@IBOutlet weak var myView: UIView!
@IBOutlet weak var scrollView: UIScrollView!

Luego, en su viewDidLayoutSubviews, puede agregar el siguiente código:

let scrollSize = CGSize(width: myView.frame.size.width, 
                        height: myView.frame.size.height)
scrollView.contentSize = scrollSize

Lo que hemos hecho es recopilar el alto y el ancho de la vista y establecer el tamaño del contenido de scrollViews para que coincida. Esto evitará que su vista de desplazamiento se desplace horizontalmente.


Más pensamientos:

CGSizeMake toma ancho y alto usando CGFloats. Es posible que deba usar su altura UIScrollViews existente para el segundo parámetro. Que se vería así:

let scrollSize = CGSize(width: myView.frame.size.width, 
                        height: scrollView.contentSize.height)

10
2017-09-02 21:36



Puede seleccionar la vista, luego debajo Attributes Inspector desmarcar User Interaction Enabled .


4
2017-11-07 02:14



Una vez que lo hice reemplazando el UIScrollView con un UITableView con solo 1 celda, funcionó bien.


0
2018-05-20 11:31



Tenía la tableView contentInset establecido en viewDidLoad (como a continuación) que causaba el desplazamiento horizontal

self.tableView.contentInset = UIEdgeInsetsMake(0, 30, 0, 0);

Compruebe si hay algún conjunto de contenido de tabla configurado por diferentes motivos y desactívelo


0
2018-05-22 08:27



Luché con esto por un tiempo intentando sin éxito las diversas sugerencias en este y otros hilos.

Sin embargo, en otro hilo (no estoy seguro de dónde) alguien sugirió que usar una restricción negativa en el UIScrollView funcionó para él.

Así que probé varias combinaciones de restricciones con resultados inconsistentes. Lo que finalmente funcionó para mí fue agregar restricciones iniciales y finales de -32 a la vista de desplazamiento y agregar una vista de texto (invisible) con un ancho de 320 (y centrado).


0
2018-06-18 15:26