UIScrollView no se desplazará, incluso después de establecer el tamaño de contenido

Mi UIScrollView es una vista horizontal de ~ 4500 px que el usuario necesita desplazarse horizontalmente para ver el contenido.

Lo configuré de la siguiente manera:

- (void)viewDidLoad { [super viewDidLoad]; sview.frame = CGRectMake(0, 0, 568, 320); sview.contentSize = CGSizeMake(4500, 320); [sview setScrollEnabled:YES]; } 

Sin embargo, la vista de desplazamiento no hace nada. ¿Hay algo obvio que eché de less? He intentado literalmente cada tutorial en la web.

Tengo un problema similar. Hice las siguientes modificaciones y el scrollView comenzó a desplazarse por mí:

  1. Seleccione para comprobar la propiedad 'Rebotar horizontalmente' para UIScrollView en xib.
  2. Mueva el código siguiente para verDidAppear en lugar de viewDidLoad:
 -(void) viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; sview.frame = CGRectMake(0, 0, 568, 320); sview.contentSize = CGSizeMake(4500, 320); [sview setScrollEnabled:YES]; } 

Creo que esto debería ayudarte.

Lo he explicado aquí , pero hay tantas respuestas a este problema que sugiere apagar el layout automático. Eso soluciona el problema, pero esa no es realmente la solución correcta. Aquí está mi respuesta:


Activar el layout automático funciona, pero esa no es la solución . Si realmente necesita el layout automático, úselo, si no lo necesita, apáguelo. Pero esa no es la solución correcta para esta solución.

UIScrollView funciona de forma diferente con otras vistas en el layout automático. Aquí está la nota de lanzamiento de Apple sobre el layout automático, he copydo el bit interesante:

Aquí hay algunas notas sobre el soporte de layout automático para UIScrollView:

  • En general, el layout automático considera que los bordes superior, izquierdo, inferior y derecho de una vista son los bordes visibles. Es decir, si pinchas una vista en el borde izquierdo de su supervista, realmente estás fijando el valor mínimo de x de los límites de la supervisión. Cambiar el origen de los límites de la supervisión no cambia la position de la vista.
  • La class UIScrollView desplaza su contenido cambiando el origen de sus límites. Para que esto funcione con el layout automático, los bordes superior, izquierdo, inferior y derecho dentro de una vista de desplazamiento ahora significan los bordes de su vista de contenido.
  • Las restricciones en las subvistas de la vista de desplazamiento deben dar como resultado un tamaño para llenar, que luego se interpreta como el tamaño de contenido de la vista de desplazamiento. (Esto no debe confundirse con el método intrinsicContentSize usado para el layout automático). Para dimensionar el marco de la vista de desplazamiento con el layout automático, las restricciones deben ser explícitas con respecto al ancho y la altura de la vista de desplazamiento, o los bordes de la vista de desplazamiento deben ser atado a vistas fuera de su subtree.
  • Tenga en count que puede hacer que una subview de la vista de desplazamiento parezca flotar (no desplazarse) sobre el otro contenido de desplazamiento creando restricciones entre la vista y una vista fuera del subtree de la vista de desplazamiento, como la vista de supervisión de la vista de desplazamiento.

A continuación, Apple muestra un ejemplo de cómo usar correctamente UIScrollView con Auto Layout.

Como regla general, una de las soluciones más fáciles es crear una restricción entre el elemento y la parte inferior de UIScrollView. Entonces, en el elemento que desea estar en la parte inferior de UIScrollView, cree esta restricción de espacio inferior:

introduzca la descripción de la imagen aquí

Una vez más, si no desea utilizar el layout automático, apáguelo. A continuación, puede configurar el contentSize la forma habitual. Pero lo que debe entender es que este es un comportamiento previsto de Auto Layout.

En primer lugar, debes agregar algo de contenido a UIScrollSiew como subvista para desplazarte, sin contenido en UIScrollView, ¿cómo puedes desplazarte ?. Esto es lo que hice, solo agregue UIImageView a UIScrollView como subvista de tamaño igual que el tamaño de UIScrollView …

En el método viewDidLoad, testing el siguiente código …

 -(void)viewDidLoad { UIScrollView *scroll=[[UIScrollView alloc] init]; scroll.frame=CGRectMake(0, 0, 320, 460); UIImageView *imageView=[[UIImageView alloc] init]; imageView.frame=CGRectMake(0, 0, 320,460); imageView.image=[UIImage imageNamed:@"chiranjeevi.jpeg"]; scroll.contentSize = CGSizeMake(4500, 460); [scroll setScrollEnabled:YES]; [scroll addSubview:imageView]; [self.view addSubview:scroll]; } 

Probé este código, funciona bien. Espero que este código te sea útil.

Supongo que está agregando UISrollingView en su file Xib. Esto funcionará para usted.

 sview.delegate = self; sview.backgroundColor=[UIColor clearColor]; [sview setCanCancelContentTouches:NO]; sview.indicatorStyle = UIScrollViewIndicatorStyleWhite; sview.clipsToBounds = YES; sview.scrollEnabled = YES; sview.contentSize = CGSizeMake(320,570); CGPoint topOffset = CGPointMake(0,0); [sview setContentOffset:topOffset animated:YES]; 

Además, asegúrese de proporcionar la connection IBOutlet en su file Xib.

También enfrenté el mismo problema. Agregué la vista de desplazamiento en xib. También agregué algunas subvenciones a esta vista de desplazamiento. La vista de desplazamiento dejaría de desplegarse después de agregar las subvistas. La solución para este problema estaba en el xib para la vista en el inspector de files. Se utilizó Checkout automático. Lo desactive y la vista de desplazamiento se desplaza después de agregar las subvistas.

La solución estaba deshaciendo el uso Autolayout en el inspector de files en xib.