[英]Prototyped collection view cell “Unable to simultaneously satisfy constraints.” warning
[英]Getting “Unable to simultaneously satisfy constraints.” warning when updating height constraint at rotation
旋转设备时,我需要更改视图的高度。 我将storyboard
与autolayout
一起autolayout
,并且在视图控制器中将高度约束设置为IBOutlet
:
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *passwordViewHeight;
然后,在视图控制器中,我还有方法:
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context)
{
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
[self.view setNeedsUpdateConstraints];
} completion:^(id<UIViewControllerTransitionCoordinatorContext> context)
{
}];
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}
- (void)updateViewConstraints
{
[super updateViewConstraints];
UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
if (orientation == UIInterfaceOrientationPortrait) {
[self.welcomeLabel setHidden:NO];
[self setAllPortraitConstraints];
}
else if ((orientation == UIInterfaceOrientationLandscapeLeft) ||
(orientation == UIInterfaceOrientationLandscapeRight)) {
[self.welcomeLabel setHidden:YES];
[self setAllLandscapeConstraints];
}
}
- (void)setAllLandscapeConstraints
{
[self.view removeConstraint:self.passwordViewHeight];
// More constraints
self.passwordViewHeight = [NSLayoutConstraint constraintWithItem:self.passwordView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:34.0];
// More constraints
[self.view addConstraint:self.passwordViewHeight];
// More constraints
}
- (void)setAllPortraitConstraints
{
[self.view removeConstraint:self.passwordViewHeight];
// More constraints
self.passwordViewHeight = [NSLayoutConstraint constraintWithItem:self.passwordView
attribute:NSLayoutAttributeHeight
relatedBy:NSLayoutRelationEqual
toItem:nil
attribute:NSLayoutAttributeNotAnAttribute
multiplier:1.0
constant:40.0];
// More constraints
[self.view addConstraint:self.passwordViewHeight];
// More constraints
}
然后,当我以纵向运行该应用程序并将设备旋转为横向时,我在Xcode
获得了此日志:
无法同时满足约束条件。 以下列表中至少有一个约束是您不想要的约束。 尝试以下操作:(1)查看每个约束,并尝试找出不期望的约束; (2)查找添加了一个或多个不必要约束的代码并进行修复。 (注意:如果看到的是您不了解的NSAutoresizingMaskLayoutConstraints,请参阅有关UIView属性translationsAutoresizingMaskIntoConstraints的文档)
(
"id: login.1, constant: 40.000000",
"id: (null), constant: 34.000000"
)
将尝试通过打破约束id:login.1,常数:40.000000进行恢复
我想替换约束以在设备方向改变时为其赋予新的常数,我在做什么错呢?
提前致谢
尝试在 loadView
或一些初始化代码中创建约束。然后将代码更改为此:尝试以下操作:
- (void)setAllLandscapeConstraints
{
self.passwordViewHeight.constant = 34;
}
- (void)setAllPortraitConstraints
{
self.passwordViewHeight.constant = 40;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.