web-dev-qa-db-fra.com

Contrainte de mise en page automatique: Comment créer une vue conserve son rapport largeur/hauteur lors du redimensionnement?

Dans le constructeur d'interface, nous pouvons épingler hauteur, largeur d'épingle, rendre deux vues égales, mais comment puis-je définir les contraintes pour que le redimensionnement d'une vue conserve son rapport largeur/hauteur?

Dans mon cas particulier, j'ai un UIImageView dans mon contrôleur de vue. Lorsque la vue est redimensionnée, j'aimerais que l'image soit redimensionnée, tout en maintenant un rapport largeur/hauteur de 3: 2. Est-il possible de le faire dans IB? Est-il possible de le faire avec du code?

Merci!

31
Joseph Lin

Vous pouvez ajouter une contrainte de rapport de format dans IB en contrôlant le déplacement de la vue vers lui-même et en choisissant le rapport de format.

36
rudi

Je ne pense pas que vous puissiez faire cela dans IB, mais dans le code, cela peut être fait comme ceci (iv est ma sortie vers la vue d'image):

    [self.iv removeConstraints:self.iv.constraints];
    NSLayoutConstraint *con1 = [NSLayoutConstraint constraintWithItem:self.iv attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1  constant:100];
    NSLayoutConstraint *con2 = [NSLayoutConstraint constraintWithItem:self.iv attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.iv attribute:NSLayoutAttributeWidth multiplier:.66 constant:0];
    [self.iv addConstraints:@[con1,con2]];

Cela définit explicitement la hauteur sur 100 et le rapport largeur/hauteur sur 3: 2.

34
rdelmar

Ce guide d’Apple m’a vraiment aidé. Il présente deux approches: l’une pour désactiver la mise en forme automatique pour certaines sous-vues et définir les images directement, et une autre pour utiliser la mise en forme automatique pure via code.

https://developer.Apple.com/library/ios/technotes/tn2154/_index.html

0
Dave Cole