J'ai ajouté une étiquette dans mon fichier nib, puis il est nécessaire d'avoir un alignement en haut à gauche pour cette étiquette. Comme je fournis du texte au moment de l'exécution, ce n'est pas sûr de savoir combien de lignes il y a. Donc, si le texte ne contient qu'une seule ligne, il apparaît comme aligné verticalement au centre. Cet alignement ne correspond pas à mon étiquette respective devant lui.
Par exemple:
Ce qui semble étrange :(
Existe-t-il un moyen de définir le texte d'étiquette approprié à l'alignement en haut à gauche?
Réponses:
Plutôt que de réexpliquer, je ferai un lien vers cette question / réponse plutôt étendue et très appréciée:
Aligner verticalement le texte en haut dans un UILabel
La réponse courte est non, Apple n'a pas rendu cela facile, mais c'est possible en modifiant la taille du cadre.
la source
C'est assez facile à faire. Créez une sous-
UILabel
catégorie avec uneverticalAlignment
propriété et un remplacementtextRectForBounds:limitedToNumberOfLines
pour renvoyer les limites correctes pour un alignement vertical en haut, au milieu ou en bas. Voici le code:SOLabel.h
SOLabel.m
la source
bounds.size.width
au lieu derect.size.width
intextRectForBounds:limitedToNumberOfLines:
semble résoudre ce problème.J'ai trouvé une solution en utilisant AutoLayout dans StoryBoard.
1) Définissez le nombre de lignes sur 0 et l'alignement du texte sur la gauche.
2) Définissez la contrainte de hauteur.
3) La contrainte de hauteur doit être en relation - inférieure ou égale
4)
J'ai obtenu le résultat comme suit:
la source
viewWillLayoutSubviews
dans le contrôleur ou le fichier de cellule? Si le contrôleur, comment accède-t-il à l'UILabel à partir de la cellule?Le SOLabel fonctionne pour moi.
Swift 3 et 5:
Cette version a été mise à jour par rapport à l'original pour permettre la prise en charge des langues RTL:
Swift 1:
la source
Dans mon cas, c'était une
bottom space
question de contrainte. Je l'avais mis à= 16
.Lorsque je l'ai réglé sur
bottom to >= 16
, ce problème a été résolu.De plus, si vous avez une contrainte de hauteur dans l'étiquette, vous devez la supprimer.
Voici la vue des contraintes de mon étiquette dans l'inspecteur de taille:
la source
Dans votre code
Sachez que si vous l'utilisez dans des cellules de tableau ou d'autres vues recyclées avec des données différentes, vous devrez stocker l'image d'origine quelque part et la réinitialiser avant d'appeler sizeToFit.
la source
J'ai trouvé une autre solution pour le même problème. J'ai utilisé
UITextView
au lieu deUILabel
et j'ai changé deeditable()
fonctionfalse
.la source
J'avais également ce problème, mais ce que j'ai trouvé, c'est l'ordre dans lequel vous définissez les propriétés et les méthodes de l'UILabel!
Si vous appelez
[label sizeToFit]
avant,label.font = [UIFont fontWithName:@"Helvetica" size:14];
le texte ne s'aligne pas sur le haut, mais si vous les échangez, c'est le cas!J'ai également remarqué que définir le texte en premier fait également une différence.
J'espère que cela t'aides.
la source
Lorsque vous utilisez le générateur d'interface, définissez les contraintes de votre étiquette (assurez-vous de définir également la hauteur et la largeur). Ensuite, dans l'inspecteur de taille, vérifiez la hauteur de l'étiquette. Là, vous voudrez qu'il lise> = au lieu de =. Ensuite, dans l'implémentation de ce contrôleur de vue, définissez le nombre de lignes sur 0 (cela peut également être fait dans IB) et définissez l'étiquette [label sizeToFit]; et au fur et à mesure que votre texte gagne en longueur, l'étiquette augmentera en hauteur et gardera votre texte en haut à gauche.
la source
Si vous avez besoin d'un texte non modifiable qui commence par défaut dans le coin supérieur gauche, vous pouvez simplement utiliser une vue de texte au lieu d'une étiquette, puis définir son état sur non modifiable, comme ceci:
Bien plus facile que de jouer avec les étiquettes ...
À votre santé!
la source
La solution avec SoLabel fonctionne, merci.
Ci-dessous, j'ai ajouté la version monotouch:
la source
Le moyen le plus simple et le plus simple consiste à intégrer Label dans StackView et à définir l'axe de StackView sur Horizontal, Alignment to Top dans Attribute Inspector de Storyboard comme indiqué ici .
la source
En s'appuyant sur la réponse impressionnante de totiG, j'ai créé une classe IBDesignable qui rend extrêmement facile la personnalisation de l'alignement vertical d'un UILabel directement depuis le StoryBoard. Assurez-vous simplement de définir la classe de votre UILabel sur «VerticalAlignLabel» à partir de l'inspecteur d'identité StoryBoard. Si l'alignement vertical ne prend pas effet, allez dans Editor-> Refresh All Views qui devrait faire l'affaire.
Comment cela fonctionne: Une fois que vous avez correctement défini la classe de votre UILabel, le storyboard devrait vous montrer un champ de saisie qui prend un entier (code d'alignement).
Mise à jour: j'ai ajouté la prise en charge des étiquettes centrées ~ Sev
Entrez 0 pour l'alignement supérieur
Entrez 1 pour l'alignement au milieu
Entrez 2 pour l'alignement inférieur
la source
vous pouvez également simplement changer votre UILabel en UITextView, car ils font essentiellement la même chose sauf que l'avantage de UITextView est que le texte est automatiquement aligné en haut à gauche
la source
J'ai ce problème mais mon étiquette était dans UITableViewCell, et dans le fond que le moyen le plus simple de résoudre le problème était de créer un UIView vide et de définir l'étiquette à l'intérieur avec des contraintes vers le haut et le côté gauche uniquement, sur off malédiction définir le nombre de lignes sur 0
la source
Pour iOS 7, c'est ce que j'ai fait et travaillé pour moi
la source
Swift 2.0:: Utilisation de l'extension UILabel
Créez des valeurs d'énumération constantes dans un fichier Swift vide.
Utilisation de l'extension UILabel:
Créez une classe Swift vide et nommez-la. Ajoutez ce qui suit.
Utilisation:
la source
sampleLabel: UILabel?
?Version Swift 3 de la réponse de @ totiG
la source
La réponse de @ totiG est correcte et a résolu mon problème. Mais j'ai trouvé un problème lors de la mise en œuvre de cette méthode, dans des appareils plus petits comme 5s, SE, cela ne fonctionne pas pour moi. Je dois mettre
label.sizeToFit()
enoverride func layoutSubViews()
la source
Swift 5
C'est simple, l'ordre des propriétés est tout.
la source
Comment définir l'alignement en haut à gauche pour l'application UILabel pour iOS? Étiquette Définir le mode de contenu sur "En haut à gauche" fonctionne pour moi, merci beaucoup:
la source