Objective C:如何使用动画调整UITextView的高度?

3

我在我的Objective C项目中有一个UITextView (textView),它包含一些文本,并被放置在另一个视图(eView)中。textView的文本相当长,因此可以进行最大化和最小化操作。当然,我希望使用动画效果来完成这个操作。

我使用以下代码改变eView的高度:

- (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];
                     }
    ];
}

我的问题是动画只能在extView上起作用。因此,当我尝试最小化视图时,textView会跳到新的高度,之后extView的高度会随着动画而改变。这个textView的跳跃真的很烦人,看起来也不好看。

我做错了什么?为什么textView的高度没有跟随动画呢?


我对自动布局不是太熟悉(我仍然更喜欢autoResizingMasks)。如果您正在调整extView的大小,则不需要手动调整textView的大小。您应该能够设置textview,使其保持与边缘的距离。在这种情况下,它将是从底部的距离。 ExtView然后应自动调整其子视图(您可能还需要启用它)。 - pnizzle
1个回答

0

在动画块之外更新您的自动布局常量。

类似这样的东西应该可以工作。

编辑:正如Duncan C.建议的那样,如果您不想更新textView的高度常量,那么您至少需要将您的textView与extView有顶部和底部关系约束

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

谢谢回答。但是我没有self.textViewHeight.constant,而且我不喜欢只使用填充差异两次更改相同高度的想法。因此,我只有从textView到extView的填充约束,我希望通过仅更改extView的高度来实现这一点。 - user3742622
如果您只想更改一个约束,则需要设置其他依赖于第一个约束的约束。因此,您将使文本视图的顶部或底部位置锚定到您的“extView”。这样,当extView的高度发生变化时,文本视图也会发生变化。当您这样做时,只需在superView上调用layoutIfNeeded,并且不要在文本视图上调用layoutIfNeeded(或在完成块中调用layoutSubviews)。 - Duncan C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接