objective-c iphone xcode uiscrollview

objective c - ¿Cómo deshabilitar el desplazamiento horizontal de UIScrollView?



objective-c iphone (10)

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)

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


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).


Prueba esto:

CGSize scrollSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, scrollHeight); [scrollView setContentSize: scrollSize];


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


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


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


Usa esta única línea.

self.automaticallyAdjustsScrollViewInsets = NO;


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];


contentSize establecer la propiedad contentSize de UIScrollView . Por ejemplo, si su UIScrollView tiene 320 píxeles de ancho (el ancho de la pantalla), puede hacer esto:

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

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


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

Puede detener el desplazamiento horizontal o el desplazamiento vertical en el método ScrollViewDelegate . 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 y de un scrollview contentOffset y lleva a detener el desplazamiento en el método scrollViewDidScroll: .