2016-06-22 3 views
2

Ich habe UITextView (textView) in einer anderen Ansicht (extView) in meinem Ziel C-Projekt mit etwas Text drin. Der Text in textView ist ziemlich lang, also könnte er maximiert und minimiert werden. Natürlich würde ich es gerne mit etwas Animation machen. ich ändern, um die Höhe von extView mit Code:Objective C: Wie vergrößere ich die Größe der Uitextview mit Animation?

- (void)setExtViewHeight:(CGFloat)newHeight withAnimation:(CGFloat)duration 
{ 
    [self setNeedsUpdateConstraints]; 
    [UIView animateWithDuration:duration 
        animations:^ 
        { 
         self.extViewHeight.constant = newHeight; 
         [self layoutIfNeeded]; 
         [self.textView layoutIfNeeded]; 
        } 
        completion:^(BOOL finished) 
        { 
         [self layoutSubviews]; 
        } 
    ]; 
} 

Mein Problem ist, dass Animation sind tatsächlich funktioniert nur für extView. Wenn ich versuche, meine Ansicht zu minimieren, springt die textView auf neue Höhe und danach ändert sich die extView-Höhe mit der Animation. Dieser Sprung von textView ist wirklich nervig und sieht nicht gut aus. Könnten Sie mir bitte eine helfende Hand geben, was habe ich falsch gemacht? Warum folgt die Höhe von textView nicht der Animation?

+0

Ich bin nicht vertraut mit Auto-Layout (ich bevorzuge immer noch autoResizingMasks). Wenn Sie die Größe von extView ändern, sollten Sie die textView auch nicht manuell anpassen müssen. Sie sollten die Textansicht so einrichten können, dass sie ihren Abstand zu den Kanten beibehält. In diesem Fall wäre das die Entfernung vom Boden. ExtView sollte dann seine Unteransichten automatisch anpassen (Sie müssen dies möglicherweise auch aktivieren). – pnizzle

Antwort

0

Aktualisieren Sie Ihre automatische Layout-Konstante außerhalb des Animationsblocks.

So etwas sollte funktionieren.

Edit: Wie Duncan C. vorgeschlagen, wenn Sie nicht auch die Textview Höhe konstant aktualisieren möchten, können Sie mindestens benötigen, um Ihre Textview oben und unten relationalen Constraints auf Ihre extView haben

- (void)setExtViewHeight:(CGFloat)newHeight withAnimation:(CGFloat)duration 
{ 
    self.extViewHeight.constant = newHeight; 
    [UIView animateWithDuration:duration animations:^{ 
     [self layoutIfNeeded]; 
    } completion:nil]; 
} 
+0

Danke für die Antwort. Aber ich habe nicht self.textViewHeight.constant und ich mag nicht die Idee, die gleiche Höhe zweimal mit nur Unterschied zu ändern. Also habe ich nur padding constraints von textView zu extView und ich würde es gerne so machen - indem ich nur extView height ändere. – user3742622

+0

Wenn Sie nur eine Einschränkung ändern möchten, müssen Sie andere Einschränkungen einrichten, die von der ersten abhängig sind. So würden Sie die obere oder untere Position Ihrer Textansicht in Ihrem "extView" verankern. Wenn sich die Höhe von extView ändert, ändert sich auch die Textansicht. Wenn Sie das tun, rufen Sie einfach layoutIfNeeded für die SuperView auf und rufen Sie layoutIfNeeded nicht in der Textansicht auf (oder rufen Sie layoutSubviews im Completion-Block auf). –

Verwandte Themen