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?
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 !
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.
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
Selon la documentation, cette propriété est automatiquement définie sur NO
si la vue est ajoutée via Interface Builder.