2011-05-22 25 views
6

Hola gente, Tengo algunos datos y quiero mostrar esto en una nueva vista dentro de una pila de navegación.iphone: uiscrollview no se desplaza? pero el contenido está configurado ..?

Creé una nueva clase viewcontroller con el archivo XIB. A continuación, he editado el archivo XI ter y se coloca la siguiente jerarquía:

1 files owner 
2 first responder 
3 scrollview 
3.1 view 
3.1.1 label1 
3.1.2 label2 
3.1.3 label3 
3.1.4 image4 

I dispuestas las etiquetas y la imagen. el contenido de las etiquetas puede diferir y deben dimensionarse dinámicamente. También hice IBOutlets en la clase viewcontroller y conecté todo correctamente. Ver delegado del archivos de propietario se establece para ver ..

luego cargar el viewcontroller y lo hago en el "viewDidLoad" - método lo siguiente:

- (void)viewDidLoad { 
[super viewDidLoad]; 

self.currentPageURL.text = [self.offerItem objectForKey: @"page-url"]; 
self.currentPrice.text = [self.offerItem objectForKey: @"price"]; 
self.currentRank.text = [self.offerItem objectForKey: @"rank"]; 
self.currentName.text = [self.offerItem objectForKey: @"name"]; 
self.currentProducerName.text = [self.offerItem objectForKey: @"producer-name"]; 

self.currentDescription.text = [self.offerItem objectForKey: @"description"]; 

self.imageViewForImage.image = [helperClass resizeImage:[self.offerItem objectForKey: @"picture"] forSize:CGSizeMake(280.0, 280.0) ]; 

[theScrollview setScrollEnabled:YES]; 
[theScrollview setContentSize:CGSizeMake(320, 1200)]; 
[theScrollview flashScrollIndicators]; 

[theScrollview addSubview:theView]; 

}

cuando inicie la aplicación en mi simulador, todo se muestra, pero si trato de desplazarme, no pasa nada ...

¿Qué hago mal?

+0

lo que es el tamaño del marco de vista '3.1' ? –

+0

Configuré el tamaño a 320x1200 en IB .. la vista de desplazamiento también se configuró 320x1200 en IB .. – dac

Respuesta

4

Cambia inmediatamente el marco de theScrollView a 320x480 y deberías ver el desplazamiento.

+1

Lo hice - pero el problema sigue siendo el mismo ... scrollview está a 320x480 en IB y la vista debajo está en 320x1200. – dac

+0

Entonces, básicamente, ¿puedes ver parte del contenido pero no puedes desplazarte? ¿Qué pasa con la propiedad 'userInteractionEnabled'? ¿Está establecido en SÍ? –

+0

sí, está configurado en IB y agregué adicionalmente [theScrollview setUserInteractionEnabled: YES]; programáticamente en el método ViewDidLoad anterior - sin reacción, sin desplazamiento ... ¿es correcta la pila que publiqué arriba? scrollview tiene una vista como niño? scrollview tiene la dimensión de la pantalla de iphone y ve la dimensión de todo el contenido? – dac

17

El ajuste automático establece algunas restricciones después de cargar la vista, por lo tanto, elija el código que establece el tamaño del contenido en viewDidLoad y colóquelo en viewDidAppear, y su código no se reescribirá.

Esto funcionó para mí.

-(void)viewDidAppear:(BOOL)animated{ 
    [self.scrollView setContentSize:CGSizeMake(320, 1000)]; 
} 

y lo siento por mi pobre inglés.

+1

¡Funcionó para mí! En lugar de usar CGSizeMake, también se puede calcular el ancho/alto del contenido en la vista de desplazamiento. – wspruijt

8

Asegúrese de que "Usar ajuste automático" es desmarcado en los atributos del documento IB. Tuve exactamente el mismo problema, estableciendo el contentSize correcto y todo, pero con esta característica habilitada, el desplazamiento siempre estaba deshabilitado.

Use Autolayout needs to be OFF

ACTUALIZACIÓN Para utilizar autoLayout, establecer explícitamente la anchura y la altura del contenido de la ScrollView en el método viewDidAppear, como este:

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    // set the scrollview to the specified size 
    CGRect screenRect = [[UIScreen mainScreen] bounds]; 
    [scrollView setContentSize:CGSizeMake(screenRect.size.width, 1100)]; 

    [scrollView setBounds:CGRectMake(0, 0, screenRect.size.width, screenRect.size.height)]; 

    [scrollView setScrollIndicatorInsets:UIEdgeInsetsFromString(@"{0,0,0,-1.0}")]; 

} 
+0

¿Por qué esto funciona de esta manera? ¡debes declarar el contenido en el viewDidAppear! – david

Cuestiones relacionadas