7

我有一个具有≤ constant高度约束和固定宽度约束的视图。在其中,我有一个文本视图,该视图具有对该外部视图的前导/尾随/顶部/底部约束,有效地“停靠”在该视图内(只有几个点边距)。我将文本视图的垂直内容压缩阻力优先级设置为 750,它会根据文本内容自行调整大小。当我进入第二行时它会增长,当我删除一行时它会缩小等等。但是,我希望那个增长/收缩是动画的。我已将此代码添加到我的文本视图和外部视图的setFrame:代码中(它们都是自定义子类):

-(void)setFrame:(CGRect)frame{
    [super setFrame:frame];
    [UIView animateWithDuration:0.2 animations:^{
        [self layoutIfNeeded];
    } completion:nil];
}

它不起作用,它仍然没有动画。然后,我有了子类,并用相同的代码NSLayoutConstraint覆盖了它的方法:setConstant:

-(void)setConstant:(CGFloat)constant{
    [super setConstant:constant];
    if(self.shouldAnimate){
        [UIView animateWithDuration:0.2 animations:^{
            [self.firstItem layoutIfNeeded];
        } completion:nil];
    }
}

它也不起作用。我在这些方法中放置了一个断点,它们根本没有被调用。显然,布局更改发生在较低级别。如何为视图的增长和缩小设置动画?一种选择是禁用内容压缩阻力优先级,在文本更改时计算我的文本视图的高度,然后手动设置高度属性,并在那里设置动画。但是,如果有一个更清洁的解决方案涉及使用内容压缩阻力进行动态/自动调整大小,我不想这样做。有解决办法吗?

4

0 回答 0