繁体   English   中英

在旋转时更新高度约束时收到“无法同时满足约束条件”警告

[英]Getting “Unable to simultaneously satisfy constraints.” warning when updating height constraint at rotation

旋转设备时,我需要更改视图的高度。 我将storyboardautolayout一起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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM