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