iOS 9约束错误

Chl*_*bta 10 cocoa-touch objective-c ios

这段代码:

[self.collectionView setTranslatesAutoresizingMaskIntoConstraints: NO];

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.collectionView
                                                      attribute:NSLayoutAttributeTop
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:self.topLayoutGuide
                                                      attribute:NSLayoutAttributeTop
                                                     multiplier:1.0f
                                                       constant:1.0f]];

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.collectionView
                                                      attribute:NSLayoutAttributeBottom
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:self.bottomLayoutGuide
                                                      attribute:NSLayoutAttributeBottom
                                                     multiplier:1.0f 
                                                       constant:0.f]];

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.collectionView 
                                                      attribute:NSLayoutAttributeLeading 
                                                      relatedBy:NSLayoutRelationEqual 
                                                         toItem:self.view
                                                      attribute:NSLayoutAttributeLeading
                                                     multiplier:1.0f
                                                       constant:0.0f]];

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.collectionView
                                                      attribute:NSLayoutAttributeTrailing 
                                                      relatedBy:NSLayoutRelationEqual 
                                                         toItem:self.view
                                                      attribute:NSLayoutAttributeRight
                                                     multiplier:1.0f 
                                                       constant:0.0f]];
Run Code Online (Sandbox Code Playgroud)

在iOS 8和iOS7上工作正常,但现在当我运行我的应用程序时使用iOS9时出现此错误:

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'***+ [NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:]:无法在前导/尾随属性和右/下之间建立约束左属性.对两者使用前导/尾随或两者都不使用.

当我删除这些约束我的应用程序工作正常.所以我需要知道问题是什么以及从iOS8到iOS9的变化.

EI *_*2.0 14

你的日志清楚地表明......你可以使用leading/trailingright/left不使用两者......

所以只需更改下面的第4个约束

[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.collectionView
                                                  attribute:NSLayoutAttributeTrailing 
                                                  relatedBy:NSLayoutRelationEqual 
                                                     toItem:self.view
                                                  attribute:NSLayoutAttributeTrailing
                                                 multiplier:1.0f 
                                                   constant:0.0f]]; 
Run Code Online (Sandbox Code Playgroud)

  • @Chlebta更好的参数检查. (4认同)
  • 谢谢这解决了我的问题但是你能解释一下为什么在iOS8中它工作得很好,不是在iOS9中有什么改变了吗? (3认同)