Jusqu'à maintenant, même à l'aide de XCode 6, je ne peut pas aligner les contrôles haut de page en page .xib fichiers. Au lieu de cela, je suis en utilisant un autre moyen.
Tout d'abord, sur l'interface builder, je continue à aligner les contrôles à la frontière supérieure de la viewcontroler de vue.
Ensuite, dans la méthode viewDidLoad, j'ai remplacer certaines contraintes de manière à ce qu'ils vont aligner en haut de page en page au lieu de l'écran principal:
- (void)viewDidLoad
{
[super viewDidLoad];
NSArray *constraints = self.view.constraints;
for (NSLayoutConstraint *constraint in constraints) {
if ( (constraint.firstItem == self.view) && (constraint.firstAttribute == NSLayoutAttributeTop) ) {
NSLayoutConstraint *newConstraint = [self constraint:constraint replaceFirstItemBy:self.topLayoutGuide attribute:NSLayoutAttributeBottom];
[self.view removeConstraint:constraint];
[self.view addConstraint:newConstraint];
} else if ( (constraint.secondItem == self.view) && (constraint.secondAttribute == NSLayoutAttributeTop) ) {
NSLayoutConstraint *newConstraint = [self constraint:constraint replaceSecondItemBy:self.topLayoutGuide attribute:NSLayoutAttributeBottom];
[self.view removeConstraint:constraint];
[self.view addConstraint:newConstraint];
}
}
}
- (NSLayoutConstraint*)constraint:(NSLayoutConstraint*)constraint replaceFirstItemBy:(id)newItem attribute:(NSLayoutAttribute)newAttribute {
UILayoutPriority priority = constraint.priority;
NSLayoutRelation relation = constraint.relation;
id secondItem = constraint.secondItem;
NSLayoutAttribute secondAttribute = constraint.secondAttribute;
CGFloat multiplier = constraint.multiplier;
CGFloat constant = constraint.constant;
NSLayoutConstraint *newConstraint = [NSLayoutConstraint constraintWithItem:newItem attribute:newAttribute relatedBy:relation toItem:secondItem attribute:secondAttribute multiplier:multiplier constant:constant];
newConstraint.priority = priority;
return newConstraint;
}
- (NSLayoutConstraint*)constraint:(NSLayoutConstraint*)constraint replaceSecondItemBy:(id)newItem attribute:(NSLayoutAttribute)newAttribute {
UILayoutPriority priority = constraint.priority;
id firstItem = constraint.firstItem;
NSLayoutAttribute firstAttribute = constraint.firstAttribute;
NSLayoutRelation relation = constraint.relation;
CGFloat multiplier = constraint.multiplier;
CGFloat constant = constraint.constant;
NSLayoutConstraint *newConstraint = [NSLayoutConstraint constraintWithItem:firstItem attribute:firstAttribute relatedBy:relation toItem:newItem attribute:newAttribute multiplier:multiplier constant:constant];
newConstraint.priority = priority;
return newConstraint;
}
Pense que ce n'est pas la meilleure façon pour que l'on remplace les objets qui nous définir dans interface builder. Mais il est peut-être une autre façon que nous pouvons penser.