应用转换时Autolayout崩溃:断言失败 - [layoutSublayersOfLayer:]

Ant*_* E. 5 transformation objective-c ios autolayout

我有一个自定义视图,在右下角显示UILabel.视图是在两者调用的方法中设置的initWithCoder:,initWithFrame:如下所示:

MCLabel* likesLabel = [[MCLabel alloc] init];
likesLabel.mc_textPadding = UIEdgeInsetsMake(0, 10, 0, 10);
likesLabel.font = [UIFont fontWithName:@"FontAwesome" size:12.f];
[likesLabel setText:@"test"];
likesLabel.numberOfLines = 2;
likesLabel.backgroundColor = [UIColor colorWithWhite:1 alpha:.8];
likesLabel.textColor = UIColor.blackColor;
likesLabel.translatesAutoresizingMaskIntoConstraints = NO;
likesLabel.textAlignment = NSTextAlignmentCenter;
likesLabel.mc_verticalTextAlignment = MCVerticalTextAlignmentTop;

[self addSubview:likesLabel];
self.likesLabel = likesLabel;

NSLayoutConstraint* widthConstraint = [NSLayoutConstraint constraintWithItem:likesLabel attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeWidth multiplier:1 constant:1];
NSLayoutConstraint* heightConstraint = [NSLayoutConstraint constraintWithItem:likesLabel attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:likesLabel attribute:NSLayoutAttributeWidth multiplier:2/5.f constant:1];
NSLayoutConstraint* horizontalPosition  = [NSLayoutConstraint constraintWithItem:likesLabel attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeRight multiplier:1 constant:1];
NSLayoutConstraint* verticalPosition  = [NSLayoutConstraint constraintWithItem:likesLabel attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeBottom multiplier:1 constant:1];
[likesLabel addConstraints:@[heightConstraint]];
[self addConstraints:@[widthConstraint, horizontalPosition, verticalPosition]];
Run Code Online (Sandbox Code Playgroud)

现在,如果我留下这样的一切,我没有任何问题,但是,只要我将一个变换应用于此标签(这是UILabel的子类,只需添加垂直对齐和边缘插入,如果这很重要)应用程序崩溃控制台中的错误:

*** Assertion failure in -[MCView layoutSublayersOfLayer:], /SourceCache/UIKit/UIKit-2935.138/UIView.m:8794
Auto Layout still required after executing -layoutSubviews
Run Code Online (Sandbox Code Playgroud)

断言提示可能[super layoutSubviews]在重写方法时子类没有调用,但我做了.

很明显,这里的问题是自动布局设置,我担心我会忽略某些东西,也许布局很模糊,因此崩溃.

还有一点需要注意:如果我在- (void)didMoveToSuperview方法中移动变换,相同的代码在iOS 8上不会崩溃.

有人可以帮到这里吗?

Sea*_*ean 5

我在iOS7(但不是iOS8)中遇到了这个问题viewWillLayoutSubviews.移动约束调整以便viewWillAppear为我修复它.


Mar*_*iro 3

在 iOS7 中,您需要在 viewDidAppear 上执行此操作。它也适用于 iOS8。如果您不想在屏幕上看到延迟的元素更改,请在应用更改后立即在 viewDidLoad 上隐藏您的超级视图,并在 viewDidAppear 上取消隐藏它。