2014-04-29 5 views
0

Lorsque vous ajoutez une vue par programme, y a-t-il une façon plus concise de l'adapter à la vue parente?Améliorer le code de mise en page automatique

NSDictionary *views = @{ @"view" : view }; 
NSArray *horizontalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[view]-0-|" options:0 metrics:nil views:views]; 
NSArray *verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[view]-0-|" options:0 metrics:nil views:views]; 
[parentView addConstraints:horizontalConstraints]; 
[parentView addConstraints:verticalConstraints]; 

Répondre

4

sans utiliser les dépendances supplémentaires de la version la plus concise de votre code est la suivante:

NSDictionary *views = @{ @"view" : view }; 
[parentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[view]|" options:0 metrics:nil views:views]]; 
[parentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|" options:0 metrics:nil views:views]]; 

(Vous n'avez pas besoin d'avoir les variables de tableau, zéro padding pris en charge et H: est la valeur de l'axe par défaut) .

Au risque d'un vote en baisse par rapport @uchuugaka, vous pouvez utiliser mon auto layout convenience category qui permettrait à la suivante:

[view pinToSuperviewEdges:JRTViewPinAllEdges inset:0]; 
+1

vous ne savez pas comment vous me fait rire xD. Je suppose que vous pouvez réduire un peu plus avec la suggestion de @uchuugaka pour omettre les tirets et les zéros –

+0

Aw Je ne suis pas en train de voter pour les DSL. Je ne vois pas le retour sur investissement dans beaucoup de cas. – uchuugaka

+0

@uchuugaka Je plaisantais surtout. La plupart. Nous avons eu _massive_ ROI sur l'utilisation de ma catégorie - je suis presque _too_ dépendant de ça maintenant. – jrturton

1

À partir de votre code, vous codez améliorer un peu, mais pas plus correcte à l'aide NSDictionaryOfVariableBindings() pour creat votre opinion dictionnaire. Si vous voulez des contraintes espacées de zéro entre un bord de la vue et le bord supérieur de la vue correspondante, vous pouvez omettre les tirets et les zéros des chaînes VFL. Au-delà de cela, vous aurez besoin d'utiliser un DSL qui signifie quelque chose d'autre à apprendre et encore comprendre et déboguer en termes de forme réelle.

Questions connexes