inside iphone ipad uiscrollview horizontal-scrolling

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.