2013-07-05 5 views
3

Comment ajouter ensemble format horizontal et vertical dans le constraintsWithVisualFormat? Il y a juste horizontal. Je veux ajouter V: | -50- [leftButton] et V: | -50- [rightButton] à lui. Comment faire ça? Créer un autre NSLayoutConstraint?mise en page automatique format horizontal et vertical ensemble

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    UIButton *leftButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [leftButton setTitle:@"Left" forState:UIControlStateNormal]; 
    [leftButton setTranslatesAutoresizingMaskIntoConstraints:NO]; 
    [self.view addSubview:leftButton]; 
    UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [rightButton setTitle:@"Right" forState:UIControlStateNormal]; 
    [rightButton setTranslatesAutoresizingMaskIntoConstraints:NO]; 
    [self.view addSubview:rightButton]; 

    NSArray *layoutConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-50-[leftButton(>=80)]-50-[rightButton(>=80)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(leftButton, rightButton)]; 
    [self.view addConstraints:layoutConstraints]; 
} 
+0

le mettre avec l'image et expliquer ce que vous voulez .. pour sa compréhension mieux :) – iPatel

+0

@iPatel Je viens de me répondre. Dites-moi si c'est la façon de le faire. –

Répondre

1

Oh, j'ai compris. Je devrais créer une autre contrainte comme ceci:

NSLayoutConstraint *leftButtonLayoutConstraint = [NSLayoutConstraint constraintWithItem:leftButton attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:10.0]; 
    [self.view addConstraint:leftButtonLayoutConstraint]; 

Dites-moi si c'est la meilleure façon de faire cela. Mais ça fonctionne de toute façon.

2

Vous pouvez créer autant de jeux de contraintes distincts en utilisant le format visuel que vous le souhaitez. Vous ne pouvez pas mélanger les contraintes horizontales et verticales dans la même chaîne, mais il n'y a rien qui vous empêche de créer:

H:|-[view]-| 

Suivi par

V:|-[view]-| 

sachez que chaque déclaration VFL comme l'expression de la mise en page en une seule ligne ou colonne de la vue d'ensemble.

1

Je ne une catégorie pour NSLayoutConstraint qui accepte une chaîne avec les deux déclarations VFL horizontales et verticales parce que je remarquai la plupart du temps je nécessaire à la fois (H: V :) sur les mêmes objets

@implementation NSLayoutConstraint (CombinedVFL) 

+(NSArray *)constraintsWithCombinedVisualFormat:(NSString *)combinedFormat views:(NSDictionary *)views 
{ 
    int indexOfVerticalChar = [combinedFormat rangeOfString:@"V:"].location; 
    NSString *verticalString = [combinedFormat substringFromIndex: indexOfVerticalChar]; 
    NSString *horizontalString = [combinedFormat substringToIndex: indexOfVerticalChar - 1 ]; // trim 

    return [[self constraintsForString:horizontalString views:views] arrayByAddingObjectsFromArray:[self constraintsForString:verticalString views:views]]; 
} 

+(NSArray *)constraintsForString:(NSString *)string views:(NSDictionary *)views 
{ 
    return [NSLayoutConstraint constraintsWithVisualFormat:string options:0 metrics:nil views:views]; 
} 

@end 

Pour appeler :

[self addConstraints:[NSLayoutConstraint constraintsWithCombinedVisualFormat:@"H:|[topBorder]| V:|[topBorder(1)]" views:@{ @"topBorder" : topBorder}]]; 

je mets le code sur mon github: https://github.com/dannyshmueli/NSLayoutConstraint-CombinedVFL

Questions connexes