我正在尝试动画UILabel的宽度。出于某种原因,动画不起作用,标签立即改变大小。我使用自动布局。这里是我写的重现这个示例项目的代码。点击按钮可更改按钮和标签的尾随限制。使用自动布局动画UILabel宽度
@interface ViewController()
@property (assign, nonatomic) BOOL controlsResized;
@property (weak, nonatomic) IBOutlet UIButton *button;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *buttonTrailingConstraint;
@property (weak, nonatomic) IBOutlet MyLabel *label;
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *labelTrailingConstraint;
- (IBAction)doTapButton:(id)sender;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self.button setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.label setTranslatesAutoresizingMaskIntoConstraints:NO];
self.label3.text = @"asdfasdfds sklfjfjls sdlkfj jjjjkfjkfdsjkdfsjklffsjkfdsjkl";
}
- (IBAction)doTapButton:(id)sender
{
if (!self.controlsResized)
{
[UIView animateWithDuration:0.5 animations:^{
self.buttonTrailingConstraint.constant = 0;
[self.button layoutIfNeeded];
self.labelTrailingConstraint.constant = 0;
[self.label layoutIfNeeded];
self.controlsResized = YES;
}];
}
else
{
[UIView animateWithDuration:0.5 animations:^{
self.buttonTrailingConstraint.constant = 100;
[self.button layoutIfNeeded];
self.labelTrailingConstraint.constant = 100;
[self.label layoutIfNeeded];
self.controlsResized = NO;
}];
}
}
@implementation MyLabel
- (void)drawTextInRect:(CGRect)rect
{
NSLog(@"drawTextInRect");
[super drawTextInRect:rect];
}
@end
正如你可以在video看到,它的工作原理为按钮,但对于标签不起作用。
我试图从MyLabel
类调查和subclassed标签。看起来,- (void)drawTextInRect:(CGRect)rect
立即被按钮按钮调用,作为[self.label layoutIfNeeded];
在动画块中的原因。为什么这样?我会期望帧被改变为动画,因为它被设置在动画块内。它和UIButton的预期一样。
为什么UILabel不调整动画大小?有没有办法解决它?
编辑: 我尝试了当前答案中提出的方法,但它们也不起作用。我认为动画代码在这里不是问题,因为它适用于我的示例中的按钮。这个问题似乎与UILabel具体有关。 UILabel似乎处理动画的大小变化不同于其他UIView子类,但我不明白为什么。
你的代码显示篡改的证据:它集'自我。 label3.text'但是'ViewController'没有'label3'属性。当你没有向我们展示你真实的代码时,很难帮助你。无论如何,我怀疑你的标签在故事板中的设置方式存在问题。 –