设备旋转时,是否有一些animation自动布局(约束)?

正如我所看到的,AutoLayouts 立即 旋转animation之前设置。 而对于animation的过渡(例如scale),我必须从-(void)willRotateToInterfaceOrientation调用我的自定义方法。 那么,当设备旋转时,有没有什么东西可以animation自动布局(约束)呢?

UPD:我检查它,它真的有用,但只有意见。 有什么与标签工作?

 // UIView UIView *yellowView = [[UIView alloc] init]; yellowView.backgroundColor = [UIColor yellowColor]; [self.view addSubview:yellowView]; yellowView.translatesAutoresizingMaskIntoConstraints = NO; [self.view addConstraint:[NSLayoutConstraint constraintWithItem:yellowView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1 constant:40]]; [self.view addConstraint:[NSLayoutConstraint constraintWithItem:yellowView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1 constant:-40]]; [self.view addConstraint:[NSLayoutConstraint constraintWithItem:yellowView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1 constant:40]]; [self.view addConstraint:[NSLayoutConstraint constraintWithItem:yellowView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1 constant:-40]]; [yellowView layoutIfNeeded]; // UILabel UILabel *greenLabel = [[UILabel alloc] initWithFrame:self.view.frame]; greenLabel.backgroundColor = [UIColor greenColor]; [self.view addSubview:greenLabel]; greenLabel.translatesAutoresizingMaskIntoConstraints = NO; [self.view addConstraint:[NSLayoutConstraint constraintWithItem:greenLabel attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1 constant:40]]; [self.view addConstraint:[NSLayoutConstraint constraintWithItem:greenLabel attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1 constant:-40]]; [self.view addConstraint:[NSLayoutConstraint constraintWithItem:greenLabel attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1 constant:40]]; [self.view addConstraint:[NSLayoutConstraint constraintWithItem:greenLabel attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1 constant:-40]]; [greenLabel layoutIfNeeded]; 

UPD2:我testinganimation,看起来像UILabels问题。 标签缩小不是animation。

 UILabel *pupureLabel = [[UILabel alloc] init]; pupureLabel.backgroundColor = [UIColor pupureColor]; [self.view addSubview:pupureLabel]; pupureLabel.frame = CGRectMake(0, 0, 320, 568); [UIView animateWithDuration:1 animations:^{ pupureLabel.frame = CGRectMake(0, 0, 100, 60); }]; 

对于AutoLayout约束,UILabel是一个奇怪的野兽。 它定义了从它所包含的文本计算出来的一个intrinsicContentSizeintrinsicContentSize作为一个隐式约束:它修复了标签的宽度和高度。 因此,如果您还为标签添加了前导约束和尾随约束,那么就会有冲突的约束,从而导致您看到的行为。

这种行为对于preferredMaxLayoutWidth多行标签是复杂的,决定了它的首选宽度。

尽pipe如此,我仍然认为它仍然是UILabel中的一个错误,它不会dynamic改变其大小。

同时,您可能需要问自己为什么要调整标签的大小(例如,不要将标签居中放在其父项中)。