2013-04-18 3 views
8

Sto utilizzando autolayout per modificare l'altezza del mio scrollview. Aggiungo un po 'di subviews allo scrollview dove incremento manualmente la dimensione del contenuto. Ma quando ricevo un evento in cui sto per cambiare l'altezza, la dimensione del contenuto è zero.UIScrollView contentsize viene reimpostato su zero quando si utilizza il layout automatico

Ecco il codice:

-(void) addTag:(NSString *)tagName { 

    ... 
    [button addTarget:self action:@selector(tagPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    [self setContentSize:CGSizeMake(self.frame.size.width, self.contentSize.height+60)]; 
    [self.items addObject: button]; 
    NSLog(@"content height: %0.2f", self.contentSize.height); 


} 

Console in uscita:

2013-04-18 18:23:06.106 TouchSelectApp[19944:c07] content height: 120.00 

Qui ho l'uscita contentSize:

- (void)tagPressed:(UIButton *)sender { 

    NSLog(@"1 content height: %0.2f", self.contentSize.height); 
    ... 
} 

Gli spettacoli console:

2013-04-18 18:17:24.747 TouchSelectApp[19944:c07] 1 content height: 0.00 

io non perché l'altezza contenuto è impostato a zero. Aiutami!

Aggiornamento: ecco il problema che sto cercando di risolvere.

Ho una vista di scorrimento con pulsanti. Inizialmente mostra solo un pulsante. Quando viene premuto il pulsante tagPressed: viene chiamato. Tag premuto modifica l'altezza per mostrare tutti i pulsanti. Quindi, quando l'utente seleziona un pulsante, l'altezza della scrollview viene modificata rispetto all'originale e l'offset viene impostato sull'origine del pulsante. Il codice seguente funziona ma l'animazione è completamente sbagliata. Se cambio l'offset e prima del blocco dell'animazione, imposta semplicemente l'offset su zero.

- (void)tagPressed:(UIButton *)sender { 

    CGPoint p; 
    float maxHeight = self.items.count * 60; 


    if (self.height.constant == maxHeight) { 
     self.height.constant = 60; 
     p = CGPointMake(0, sender.frame.origin.y-5);  
    }else { 
     self.height.constant = maxHeight; 
     p = CGPointMake(0, 0); 
    } 

    [self.superview setNeedsUpdateConstraints]; 

    [UIView animateWithDuration:0.5f animations: ^{ 
      [self.superview layoutIfNeeded]; 
    } completion:^(BOOL finished) { 
      [self setContentOffset:p]; 

    }]; 

}

+0

aggiornerò il post con il problema originale. –

+0

Non vedo perché è necessaria una vista di scorrimento per questo. Hai una vista che mostra o un pulsante o mostra tutti i pulsanti; dov'è lo scrolling? Basta usare una vista che cambia dimensione. Ancora meglio, basta mostrare e nascondere e i pulsanti, se necessario, forse. – matt

+0

Si noti che una vista di scorrimento è così che * l'utente * può scorrere. * Puoi * scorrere (cioè mostrare un particolare pulsante) senza una vista di scorrimento, quindi se questo è tutto ciò che stai cercando di fare, ti suggerirei di evitare la vista di scorrimento, che aggiunge molte complicazioni che non ti servono (fino a come posso dire). – matt

risposta

10

Se si utilizza il layout automatico con una UIScrollView, non si imposta la proprietà contentSize. Vedere here per ulteriori informazioni (scorrere fino alla sezione UIScrollView).

+2

Sto davvero cercando di modificare l'offset del contenuto. Come lo posso fare? –

+2

È possibile impostare ContentSize in ViewDidLayoutSubviews.Che funziona bene per me usando Autolayout cioè - (void) viewDidLayoutSubviews { [_scrollView setContentSize: CGSizeMake (_scrollView.width contano * [_imageViews], 0)]; } – Yasper