2015-09-21 40 views
10

Questo codice:iOS 9 vincolo errore

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

di funzionare correttamente su iOS 8 e iOS7 ma ora quando con iOS9 quando corro la mia app ottengo questo errore:

terminazione app a causa di non rilevata eccezione 'NSInvalidArgumentException', motivo: '*** + [NSLayoutConstraint constraintWithItem: attributo: relatedBy: toItem: attributo: moltiplicatore: costante:]: non è possibile creare un vincolo tra un attributo iniziale/finale e un attributo destra/sinistra. Usa in vantaggio/in fondo per entrambi o nessuno dei due. '

Quando rimuovo questi vincoli, la mia app funziona correttamente. Quindi ho bisogno di sapere qual è il problema e cosa è cambiato da iOS8 a iOS9.

risposta

13

Il registro suggeriscono chiaramente che ... o si può utilizzare leading/trailing o right/left non entrambi ...

Quindi, basta cambiare quarto vincolo come qui di seguito

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

Grazie a questo ho risolto il problema, ma mi puoi spiegare perché in iOS8 funziona bene non in iOS9 cosa sono stati modificati? – Chlebta

+4

@Chlebta Migliore controllo dei parametri. – Sulthan

2

ho avuto queste righe:

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

Sono stato modificato in:

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

Questa è la soluzione all'errore.