web-dev-qa-db-fra.com

Comprendre la "contrainte de mise en page automatique" de la première ligne de base "et de la" base de ligne "

J'ai créé la vue suivante qui ressemble à ceci:

screenshot 1

Et utilisé Ajouter des contraintes manquantes t ajouter automatiquement des contraintes. Je suis assez nouveau dans le monde iOS et j'essaie de configurer le fonctionnement des contraintes.

Sur le plan du document, je peux voir les contraintes supplémentaires:

screenshot 2

Je clique sur l'étiquette [~ # ~] ur [~ # ~] et l'inspecteur de taille me montre ce qui suit:

screenshot 3

Quelle est la différence entre les contraintes alignées par la première ligne de base sur UL et alignées par la ligne de base sur UL? Lorsque je clique sur le bouton Inspecteur de taille sur les contraintes, il me montre la même ligne.

17
zero_coding

Depuis le Apple Docs:

NSLayoutAttributeBaseline
Ligne de base de l'objet.
Disponible dans iOS 6.0 et versions ultérieures.
NSLayoutAttributeFirstBaseline
Ligne de base de l'objet. Pour les objets comportant plusieurs lignes de texte, il s'agit de la ligne de base de la ligne de texte la plus haute.
Disponible dans iOS 8.0 et versions ultérieures.

Voici également une capture d'écran de la différence lors de l'alignement sur une étiquette à trois lignes. L'étiquette verte supérieure utilise NSLayoutAttributeFirstBaseline et l'étiquette verte inférieure utilise NSLayoutAttributeBaseline. Ce sont les seules contraintes sur les deux étiquettes vertes en plus d'être toutes deux épinglées horizontalement 40 de l'étiquette rose

DebuggingBaselineConstraints

33
naomimichiko

Je ne recommande jamais d'utiliser "Ajouter des contraintes manquantes". C'est un assistant très imprévisible qui DWIW (fait ce qu'il veut). Apprenez chaque contrainte et ajoutez-la à la main. Ctrl-faites glisser entre les objets dans la hiérarchie des scènes; utilisez l'inspecteur de contraintes et modifiez les valeurs numériques; utilisez "Mettre à jour les images" dans la fenêtre contextuelle du triangle; supprimer les contraintes de l'inspecteur; répétez jusqu'à ce que vous l'obteniez.

firstBaseLine fait référence à la ligne de base supérieure d'un objet multiligne: Avertissement du storyboard: premier attribut de mise en page de la ligne de base avant iOS 8.

si l'étiquette ou le champ de texte impliqué n'a qu'une seule ligne, c'est une contrainte inutile.

Lorsque vous souhaitez que deux taches d'une ligne côte à côte de texte s'alignent verticalement, même si leurs tailles de police, ascendants et descendants de ligne de base peuvent différer, utilisez l'alignement baseLine. Il semblera naturel que les cordes soient sur la même ligne.

Les alignements verticaux Bas, Haut et Centre sont également possibles et plus appropriés pour les objets non textuels.

11
BaseZen