iphone - inside - Cómo bloquear el desplazamiento horizontal de un scrollView en iOS
uiscrollview swift programmatically (10)
tengo un scrollView. Quiero que se desplace solo en una dirección (VERTICAL). ¿Hay alguna manera de bloquear el desplazamiento horizontal ...? ...
Consulte this pregunta, debe establecer el tamaño desplazable en el tamaño correspondiente de la vista para que no haya nada que desplazarse.
El método más seguro y exitoso que he encontrado para restringir el movimiento de una vista de desplazamiento es subclase UIScrollView y reemplazar los métodos setContentOffset: animated: y setContentOffset: (código a continuación).
La ventaja de anular estos métodos es que altera directamente el contentOffset solicitado antes de que el código UIKit comience a actuar sobre él, evitando cualquiera de los efectos secundarios que pueden ocurrir al modificar el contentOffset en scrollViewDidScroll: u otros métodos UIScrollViewDelegate .
Solo lleva unos minutos crear la nueva subclase y funciona como un amuleto.
- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated {
// restrict movement to vertical only
CGPoint newOffset = CGPointMake(0, contentOffset.y);
[super setContentOffset:newOffset animated:animated];
}
- (void)setContentOffset:(CGPoint)contentOffset {
// restrict movement to vertical only
CGPoint newOffset = CGPointMake(0, contentOffset.y);
[super setContentOffset:newOffset];
}
En mi caso, contentSize era más alto que UIScrollView para xey. Para mí, la respuesta de meronixe funcionó bastante bien, pero era para mis necesidades no del todo completa. Lamentablemente, la barra de desplazamiento horizontal aún era visible.
Esto podría cambiar con el siguiente código en
- (void)webViewDidFinishLoad:(UIWebView *)webView
[self.webView.scrollView setShowsHorizontalScrollIndicator:NO];
Puedes probar esto,
self.ScrollView.contentSize = CGSizeMake(self.ScrollView.frame.size.width, 1450);
aquí 1450 es mi altura de vista.
ScrollView solo se puede desplazar horizontalmente si configuras el ancho del tamaño del contenido más grande que el marco scrollView. Si configura el ancho del tamaño del contenido al igual que la vista de desplazamiento, no se desplazará. Por ejemplo
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0,0,100,100)] [scrollView setContentSize:CGSizeMake(100, 300)]
Si la propiedad contentSize
de UIScrollView tiene el mismo ancho que el UIScrollView, entonces no será posible el desplazamiento horizontal.
¿Desea detener el desplazamiento horizontal cuando el desplazamiento horizontal sería válido? (es decir, contentSize
es más ancho que el ancho real UIScrollView?) Si ''sí'', ¿por qué quieres hacer eso?
oh, desde iOS7 usa esto (en initWithNibName):
self.automaticallyAdjustsScrollViewInsets = NO;
y crea el 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];
La misma respuesta (adaptada) para usted como en:
Desactivar el desplazamiento vertical en UIScrollView
bien, todas las respuestas aquí están bien ...
pero si por alguna extraña razón tu contentSize debe ser más alto que UIScrollView
en ambas dimensiones, puedes deshabilitar el desplazamiento horizontal implementando el método de protocolo UIScrollView
-(void)scrollViewDidScroll:(UIScrollView *)aScrollView
solo agregue esto en su UIViewController
float oldX; // here or better in .h interface
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
{
[aScrollView setContentOffset: CGPointMake(oldX, aScrollView.contentOffset.y)];
// or if you are sure you wanna it always on left:
// [aScrollView setContentOffset: CGPointMake(0, aScrollView.contentOffset.y)];
}
es solo el método que se usa cuando el usuario desplaza su UIScrollView
, y al hacerlo, fuerza que el contenido tenga siempre el mismo. x
Rápido
Hacer contentOffset.x = 0
para deshabilitar desplazamiento horizontal
extension ViewController: UIScrollViewDelegate {
func scrollViewDidScroll(_ scrollView: UIScrollView) {
scrollView.contentOffset.x = 0//to lock horizontal scrolling
//scrollView.contentOffset.y = 0//to lock vertical scrolling
}
}
Además, puede deshabilitar el indicador de desplazamiento como
scrollView.showsHorizontalScrollIndicator = false//to disable HorizontalScrollIndicator
scrollView.showsVerticalScrollIndicator = false//to disable VerticalScrollIndicator
self.scrollview.contentSize = CGSizeMake(1, self.scrollview.frame.size.height * number_of_items);
debería ayudar. Acabo de bloquear mi vista de desplazamiento horizontalmente, haciendo una técnica similar.