2012-06-24 59 views
11

Recientemente he descargado Xcode 4.5 (iOS 6), pero cuando trató de seguir uno de mis proyectos me di cuenta de que el UIScrollView no está funcionando adecuadamente, permítanme explicar con mayor claridad:UIScrollView en IOS 6

I 'he creado el UIScrollView y ha añadido que la inicializado usando el siguiente código:

-(void)viewDidLoad{ 

    [mainScrollView setScrollEnabled:YES]; 
    mainScrollView.contentSize = CGSizeMake(480, 0); 

    [super viewDidLoad]; 

} 

después abrí XI ter y vinculado al mainScrollView a un UIScrollView, después de añadir un poco de UIButton de la scrollView.When I construyó el proyecto del mainScrollView estaba desplazándose pero los botones no aparecieron, quiero decir, solo podía ver el botón que ya estaba en el scre es ¿Qué estoy haciendo mal? ¿Cómo puedo configurar UIScrollView?

+0

Tuve el mismo problema ahora. ¿Podría ser esto un error en el SDK de iOS6? –

Respuesta

4

Tal vez usted acaba de escribir esto mal, pero su CGSize tiene una altura de 0?

+0

¡Solo para deshabilitar el desplazamiento vertical! – Mateus

+1

¿No puedes simplemente desactivarlo en IB? ¿O simplemente usando propiedades? Establecer el ancho de CGSize en 0 suena como una mala idea. – DGund

+0

Si desea deshabilitar el desplazamiento vertical, configure la altura del contenido del mismo modo que el tamaño de la vista de desplazamiento y desactive el rebote vertical. –

3

Creo que esto es un error con Xcode 4.5 o iOS 6 SDK. La forma en que lo arreglé fue agregando las subvistas a mi UIScrollView programáticamente.

Así que tendría que hacer algo como:

- (void)viewDidLoad { 

    [super viewDidLoad]; 

    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(400.0f, 10.0f, 60.0f, 30.0f); 
    [mainScrollView addSubView:button]; 
    mainScrollView.contentSize = CGSizeMake(480.0f, mainScrollView.frame.size.height); 
} 

Prueba esto y quiero saber si esto funciona para usted.

Si tiene una versión anterior de Xcode podría ser una buena idea replicar el código y la punta allí para ver los resultados.

39

Para xcode 4.5, Si está usando scrollView tiene que desmarcar "use AutoLayout" en el inspector de archivos.

o si se quiere "utilizar AutoLayout", a continuación, en .m (aplicación) presentar agregar este

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    theScroller.contentSize=CGSizeMake(1024.0,1300.0); 
} 
+1

¡Gracias, gracias, gracias! Golpeando mi cabeza contra una pared de ladrillos por una hora o más con esto. Una vez más, gracias. – PaulJ

+2

Bien, entonces la respuesta para AutoLayout se encuentra aquí: http://stackoverflow.com/questions/12619786/embed-imageview-in-scrollview-with-auto-layout-on-ios-6 básicamente, mueve el 'contentSize' codificar el método 'viewDidAppear'. – PaulJ

+0

¡GRACIAS por esta publicación! Literalmente he quemado todo un día con esto. Desmarqué "usar AutoLayout" y finalmente mi scrollView funciona como debería. Me quema ... TY otra vez – tg2007

4

Puede hacerlo con Diseño automático en Xcode 4.5 Pero config su UIScrollView en viewDidAppear

hago esto también en un UITableView estática con imágenes.

Nombre sus imágenes como timg1.png, timg2.png ....

en su archivo ControllerView.h

@property (weak, nonatomic) IBOutlet UIScrollView *Sv1; 
@property (weak, nonatomic) IBOutlet UIPageControl *Pc1; 

En su ControllerView.m Archivo

-(void)viewDidAppear:(BOOL)animated 
{ 

    //Scrollview 
    Sv1.delegate = self; 

    Sv1.contentSize = CGSizeMake(260, 176); 

    [self.Sv1 setBackgroundColor:[UIColor clearColor]]; 
    // ScrollViewGarten.frame = CGRectMake(9, 11, 283, 170); 
    [Sv1 setCanCancelContentTouches:NO]; 

    Sv1.multipleTouchEnabled = NO; 
    Sv1.indicatorStyle = UIScrollViewIndicatorStyleWhite; 
    Sv1.clipsToBounds = YES; 
    Sv1.scrollEnabled = YES; 
    Sv1.pagingEnabled = YES; 

    NSUInteger nimagesTextil = 0; 
    CGFloat cxTextil = 0; 
    for (; ; nimagesTextil++) { 
     NSString *imageNameTextil = [NSString stringWithFormat:@"timg%d.png", (nimagesTextil + 1)]; 
     UIImage *imageTextil = [UIImage imageNamed:imageNameTextil]; 
     if (imageTextil == nil) { 
      break; 
     } 
     UIImageView *imageViewTextil = [[UIImageView alloc] initWithImage:imageTextil]; 

     CGRect rect = imageViewTextil.frame; 
     rect.size.height = 176; 
     rect.size.width = 260; 
     rect.origin.x = ((Sv1.frame.size.width - imageTextil.size.width)/2) + cxTextil; 
     rect.origin.y = ((Sv1.frame.size.height - imageTextil.size.height)/2); 

     imageViewTextil.frame = rect; 

     [Sv1 addSubview:imageViewTextil]; 

     cxTextil += Sv1.frame.size.width; 
    } 
    self.Pc1.numberOfPages = nimagesTextil; 
    [Sv1 setContentSize:CGSizeMake(cxTextil, [Sv1 bounds].size.height)]; 
    self.Pc1.currentPage = 0; 

} 
0

I lo haría así:

-(void)viewDidLayoutSubviews 
{ 
[self.scrollview setScrollEnabled:YES]; 
[self.scrollview setUserInteractionEnabled:YES]; 
[self.scrollview setContentSize:CGSizeMake(320, _y)]; 
[self.scrollview setAlwaysBounceVertical:YES]; 
} 

Utilizo la variable de clase _y porque le agregué todas las alturas de subvistas.

Cuestiones relacionadas