Ich verwende autolayout
, um die Höhe meines scrollview
zu ändern. Ich füge etwas subviews
dem scrollview
hinzu, in dem ich die Inhaltsgröße manuell inkrementiere. Aber wenn ich ein Ereignis bekomme, bei dem ich die Höhe ändern möchte, ist die Inhaltsgröße gleich Null. HierUIScrollView contentsize wird bei Verwendung des automatischen Layouts auf Null zurückgesetzt
ist der Code:
-(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);
}
Konsolenausgabe:
2013-04-18 18:23:06.106 TouchSelectApp[19944:c07] content height: 120.00
Here I Ausgang der content:
- (void)tagPressed:(UIButton *)sender {
NSLog(@"1 content height: %0.2f", self.contentSize.height);
...
}
Die Konsole zeigt:
2013-04-18 18:17:24.747 TouchSelectApp[19944:c07] 1 content height: 0.00
Ich weiß nicht, warum die Inhaltshöhe auf Null gesetzt. Hilf mir!
Update: Hier ist das Problem, das ich versuche zu lösen.
Ich habe eine Bildlaufansicht mit Tasten. Anfangs zeigt es nur einen Knopf. Wenn die Taste gedrückt wird, wird tagPressed: aufgerufen. Tag gedrückt ändert die Höhe, um alle Schaltflächen anzuzeigen. Wenn der Benutzer dann eine Schaltfläche auswählt, wird die Höhe der Bildlaufansicht auf das Original geändert und der Offset wird auf den Ursprung der Schaltfläche gesetzt. Der folgende Code funktioniert, aber die Animation ist alles falsch. Wenn ich den Offset und vor dem Animationsblock ändere, wird nur der Offset auf Null gesetzt.
- (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];
}];
}
Ich werde den Beitrag mit dem ursprünglichen Problem aktualisieren. –
Ich sehe nicht, warum Sie überhaupt eine Bildlaufansicht benötigen. Sie haben eine Ansicht, die entweder eine Schaltfläche anzeigt oder alle Schaltflächen anzeigt. Wo ist das Scrollen? Verwenden Sie einfach eine Ansicht, die die Größe ändert. Noch besser, zeige und verstecke einfach nur die Tasten, wenn es nötig ist. – matt
Beachten Sie, dass eine Bildlaufansicht so ist, dass der * Benutzer * blättern kann. * Sie * können scrollen (dh eine bestimmte Schaltfläche anzeigen), ohne eine Scroll-Ansicht. Wenn Sie also nur versuchen, würde ich vorschlagen, die Scroll-Ansicht zu vermeiden, die eine Menge Komplikationen hinzufügt, die Sie nicht benötigen (soweit wie ich es sagen kann). – matt