Je suis nouveau à la mise en page automatique dans iOS. J'aime vraiment le concept de principe, mais ça me rend fou pour essayer de faire les choses les plus simples. Je soupçonne que je manque toujours un simple principe sous-jacent. J'essaie d'apprendre en faisant et d'obtenir les bases juste avant de travailler avec elle dans une application, donc je crée des projets de test très simples. Voici un aussi simple que cela ne fonctionne pas comme prévu. D'abord la partie qui fonctionne. Dans IB, j'ajoute une vue pour remplir l'ensemble de la visualisation et Xcode définit automatiquement les contraintes sur le haut / le bas / le bas / la pointe / la fuite / l'espace sur 0. Lorsqu'il est fait avec IB, cela fonctionne comme prévu:
p>
tourne à p>
p>
super! p>
Maintenant, j'essaie de faire la même chose en code: P>
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. UIView *redView = [[UIView alloc] initWithFrame:self.view.bounds]; redView.backgroundColor = [UIColor redColor]; [self.view addSubview:redView]; redView.translatesAutoresizingMaskIntoConstraints = NO; [self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0f constant:0.0f]]; [self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0f constant:0.0f]]; [self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0f constant:0.0f]]; [self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0f constant:0.0f]]; }
3 Réponses :
Voici comment je ferais ceci:
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[redView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(redView)]]; [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[redView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(redView)]];
Merci! Cela fonctionne (après avoir ajouté le manquant | dans V: | [RedView] ... Mais pourquoi le diable ne fonctionne pas mon autre code ??? C'est équivalent à ce que IB montre, n'est-ce pas ???
Oui, je manquais un tuyau là-bas. Fixé. Et pour être honnête, je ne sais pas. J'ai trouvé VFL et n'ayé plus d'autre choix pour mes besoins d'autolayoue.
Salut les gars. 6 mois plus tard, j'ai rencontré le même problème, mais je veux le faire avec MyController.View directement, pas une vue dans MyController.View. Et ça fait ... rien!
@Amitbattan Oui, vous pouvez: développeur.apple.com / bibliothèque / iOS / documentation / userexperience / ...
@shinyux Je sais que c'est vieux (espérons que vous avez déjà résolu le problème), afin d'utiliser ces contraintes dans les codes, vous devez définir TraducateAutoresizingMaskintOntroToutes code> sur
non code>.
Au lieu de mener et de traîner, utilisez le haut et le bas. Notez que vous mélangez-les en poste d'origine. Leading et la traînée semblent confondre les gens! P>
Je sais que c'est vieux, mais je pense que la question avec vos contraintes était que vous confondez ce que vous avez suivi, etc. représentent. J'ai modifié votre code à ce qui suit et remplit maintenant l'écran comme prévu:
UIView *redView = [[UIView alloc] initWithFrame:self.view.bounds]; redView.backgroundColor = [UIColor redColor]; [self.view addSubview:redView]; redView.translatesAutoresizingMaskIntoConstraints = NO; [self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0f constant:0.0f]]; [self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0f constant:0.0f]]; [self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1.0f constant:0.0f]]; [self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0f constant:0.0f]];