Подтвердить что ты не робот

Ошибка ограничения iOS 9

Этот код:

[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]];

Работайте отлично на iOS 8 и iOS7, но теперь, когда с iOS9 при запуске моего приложения я получаю эту ошибку:

Завершение приложения из-за неотображенного исключения "NSInvalidArgumentException", причина: "*** + [NSLayoutConstraint constraintWithItem: attribute: relatedBy: toItem: attribute: multiplier: constant:]: ограничение между ведущим/трейлинг-атрибутом и атрибут right/left. Используйте ведущий/трейлинг для обоих или нигде. '

Когда я удаляю эти ограничения, мое приложение работает нормально. Поэтому мне нужно знать, что проблема и что изменилось с iOS8 на iOS9.

4b9b3361

Ответ 1

В вашем журнале четко указано, что... либо вы можете использовать leading/trailing или right/left не оба...

Итак, просто измените четвертое ограничение, как показано ниже

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

Ответ 2

У меня были следующие строки:

NSLayoutConstraint *leftConstraint = [NSLayoutConstraint constraintWithItem:self.contentView
                                                                  attribute:NSLayoutAttributeLeading
                                                                  relatedBy:0
                                                                     toItem:self.view
                                                                  attribute:NSLayoutAttributeLeft
                                                                 multiplier:1.0
                                                                   constant:0];
[self.view addConstraint:leftConstraint];

NSLayoutConstraint *rightConstraint = [NSLayoutConstraint constraintWithItem:self.contentView
                                                                   attribute:NSLayoutAttributeTrailing
                                                                   relatedBy:0
                                                                      toItem:self.view
                                                                   attribute:NSLayoutAttributeRight
                                                                  multiplier:1.0
                                                                    constant:0];
[self.view addConstraint:rightConstraint];

Я изменил на это:

NSLayoutConstraint *leftConstraint = [NSLayoutConstraint constraintWithItem:self.contentView
                                                                  attribute:NSLayoutAttributeLeading
                                                                  relatedBy:0
                                                                     toItem:self.view
                                                                  attribute:NSLayoutAttributeLeading
                                                                 multiplier:1.0
                                                                   constant:0];
[self.view addConstraint:leftConstraint];

NSLayoutConstraint *rightConstraint = [NSLayoutConstraint constraintWithItem:self.contentView
                                                                   attribute:NSLayoutAttributeTrailing
                                                                   relatedBy:0
                                                                      toItem:self.view
                                                                   attribute:NSLayoutAttributeTrailing
                                                                  multiplier:1.0
                                                                    constant:0];
[self.view addConstraint:rightConstraint];

Это решение ошибки.