web-dev-qa-db-fra.com

Où définir translatesAutoresizingMaskIntoConstraints dans Xcode 4.5

Je dois définir translatesAutoresizingMaskIntoConstraints sur NO. Par défaut, il est défini sur YES (pour aider la majorité des applications qui passent des jambes de suspension et des ressorts à la nouvelle disposition automatique).

Y a-t-il quelque part dans Xcode où la valeur par défaut peut être changée de YES à NO?

Ou dois-je le régler manuellement pour chaque vue?

34
Jon Cox

C'est une excellente question - et j'ai essayé de trouver une réponse pour moi. Malheureusement, il semble qu'il n'y ait pas de "solution miracle". Actuellement, Apple considère l'option de mise en page basée sur les contraintes - même en nommant une section de la référence de classe UIView :

Activation de la mise en page basée sur les contraintes

Mais cet opt-in n'est pas mondial. Je suppose que c'est parce que tout ne semble pas bien si vous transformez simplement les ressorts et les jambes de force en contraintes. Certains éléments de l'interface utilisateur se brisent, ou vous obtiendriez une tonne d'erreurs de contraintes insatisfaisantes.

Je peux penser à une solution possible - Je ne l'ai pas essayée moi-même, mais vous pouvez créer une catégorie sur UIView qui définit tout UIView objets à renvoyer NO pour - (BOOL)translatesAutoresizingMaskIntoConstraints. Bien que je ne sache pas ce que cela casserait, cela définirait globalement translatesAutoresizingMaskIntoConstraints sur NO.

Voici ne bonne introduction aux catégories si vous voulez en savoir plus !

16
redlightbulb

Je suis en retard à cette question, mais l'option mentionnée est toujours manquante dans Xcode 5 et 6, donc la question est toujours significative.

En fait, nous pouvons toujours définir une valeur pour n'importe quelle propriété d'une vue/contrôle/objet en ajoutant ser Defined Runtime Atribute dans Storyboard (Interface Builder) comme la capture d'écran suivante.

Et cela fonctionne également pour translatesAutoresizingMaskIntoConstraints. La question pourrait donc être résolue.

enter image description here

20
CocoaBob

Lorsque vous devez modifier la taille ou la position de votre sous-vue. Utilisation (BOOL)translatesAutoresizingMaskIntoConstraints avant de définir le cadre de votre sous-vue.

[self.benchmarkButton removeFromSuperview];
[self.benchmarkButton setTranslatesAutoresizingMaskIntoConstraints:YES];
[self.benchmarkButton setFrame:CGRectMake(20, self.benchmarkButton.frame.Origin.y+40, 260, 30)];
[self.benchmarksView addSubview:self.benchmarkButton];

C'est ainsi que votre sous-vue ne résistera pas aux contraintes car elle est par défaut (AutoLayout) dans Xcode 4.3 et versions ultérieures. Merci

4

Selon la documentation, cette propriété est automatiquement définie sur NO si la vue est ajoutée via Interface Builder.

https://developer.Apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//Apple_ref/occ/instp/UIView/translatesAutoresizingMaskIntoConstraints

4
kwl