web-dev-qa-db-fra.com

Mise en page automatique - Position par pourcentage

J'aimerais cartographier les points le long d'une ligne.

line across screen

La longueur de la ligne dépend de l'appareil et de l'orientation et est toujours étirée sur tout l'écran. Par conséquent, il serait plus logique pour moi de positionner les points en utilisant un pourcentage relatif valeur.

Jusqu'à présent, je n'ai trouvé que des contraintes définies dans une sorte de valeur en points ( Doc )

Est-il également possible d'utiliser des valeurs de pourcentage comme contraintes? Des idées sur la façon de positionner ces points de manière évolutive ... ou dois-je faire cette conversion/positionnement "manuellement"?

34
Bernd

Oui, vous pouvez positionner le point sur une fraction de la largeur de la vue. La méthode NSLayoutConstraint, constraintWithItem: attribute: relatedBy: toItem: attribute: multiplier: constant :, possède ce paramètre multiplicateur qui vous permet d'utiliser une relation fractionnaire entre une vue d'ensemble et sa sous-vue. Le bord droit de la vue d'ensemble sera la largeur de cette vue (l'écran s'il s'agit d'une vue pleine largeur), donc si vous créez une contrainte comme ci-dessous, le point sera positionné à une distance fractionnelle le long de la ligne:

-(void)viewDidLoad {
      [super viewDidLoad];
      [self.view removeConstraint:self.leftConDark];
      [self.view removeConstraint:self.leftConLight];
      NSLayoutConstraint *lcd = [NSLayoutConstraint constraintWithItem:self.darkButton 
                                                             attribute:NSLayoutAttributeCenterX 
                                                             relatedBy:NSLayoutRelationEqual 
                                                                toItem:self.view 
                                                             attribute:NSLayoutAttributeRight 
                                                            multiplier:.5 
                                                              constant:0];
      NSLayoutConstraint *lcl = [NSLayoutConstraint constraintWithItem:self.lightButton 
                                                             attribute:NSLayoutAttributeCenterX 
                                                             relatedBy:NSLayoutRelationEqual 
                                                                toItem:self.view 
                                                             attribute:NSLayoutAttributeRight 
                                                            multiplier:.9 
                                                              constant:0];
      [self.view addConstraints:@[lcd,lcl]];
}

Dans cet exemple, je positionne deux boutons UIB (type info sombre et clair). Je les ai ajoutés dans IB et j'ai fait des IBOutlets à leurs contraintes qu'ils ont du côté gauche de la vue (c'est ce que le système m'a donné, cela aurait pu être du côté droit - cela n'a pas d'importance puisque vous les supprimez de toute façon Si vous créez les points dans le code, vous n’avez pas besoin de le faire). Dans le code, je supprime ces contraintes, puis j'en ajoute de nouvelles qui placeront le centre des boutons à 50% et 90% de la largeur de l'écran.

47
rdelmar

Je ne suis pas un expert en mise en page automatique (ou même encore compétent!) Mais à partir de XCode 6, vous semblez pouvoir le faire dans IB.

  1. Sélectionnez l'objet.
  2. Afficher l'inspecteur de taille (cliquez sur la règle) size inspector

  3. Double-cliquez sur le rectangle de contrainte (pas évident! "Modifier" vous emmène ailleurs)

constraint rectangle

  1. Ici, vous pouvez définir le multiplicateur comme dans la réponse ci-dessus.

enter image description here

12
Greg Bell