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];
}];
}
aggiornerò il post con il problema originale. –
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
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