Considérez que j'ai le texte suivant dans un UILabel
(une longue ligne de texte dynamique):
Étant donné que l'armée extraterrestre surpasse largement l'équipe, les joueurs doivent utiliser le monde post-apocalyptique à leur avantage, comme chercher une couverture derrière des bennes à ordures, des piliers, des voitures, des décombres et d'autres objets.
Je veux redimensionner la UILabel's
hauteur pour que le texte puisse tenir. J'utilise les propriétés suivantes de UILabel
pour faire en sorte que le texte soit enveloppé.
myUILabel.lineBreakMode = UILineBreakModeWordWrap;
myUILabel.numberOfLines = 0;
Veuillez me faire savoir si je ne vais pas dans la bonne direction. Merci.
ios
cocoa-touch
uikit
uilabel
Mustafa
la source
la source
Réponses:
sizeWithFont constrainedToSize:lineBreakMode:
est la méthode à utiliser. Un exemple de la façon de l'utiliser est ci-dessous:la source
[label sizeToFit]
.sizeWithFont
c'est obsolète dans iOS 7. stackoverflow.com/questions/18897896/…Vous alliez dans la bonne direction. Il vous suffit de:
la source
Dans iOS 6, Apple a ajouté une propriété à UILabel qui simplifie considérablement le redimensionnement vertical dynamique des étiquettes: PreferredMaxLayoutWidth .
L'utilisation de cette propriété en combinaison avec lineBreakMode = NSLineBreakByWordWrapping et la méthode sizeToFit permet de redimensionner facilement une instance UILabel à la hauteur qui contient tout le texte.
Une citation de la documentation iOS:
Un échantillon:
la source
Vérifiez parfaitement ce travail sans ajouter une seule ligne de code. (Utilisation de la mise en page automatique)
J'ai fait une démo pour vous selon vos besoins. Téléchargez-le à partir du lien ci-dessous,
Redimensionner automatiquement UIView et UILabel
Guide étape par étape: -
Étape 1 :- Réglez la contrainte sur UIView
1) En tête 2) En haut 3) En fin de ligne (vue principale)
Étape 2: - Définissez la contrainte sur l'étiquette 1
1) En tête 2) Top 3) En fin de ligne (De sa vue d'ensemble)
Étape 3: - Définissez la contrainte sur l'étiquette 2
1) Interlignage 2) Trailing (de sa vue d'ensemble)
Étape 4: - Donner le plus difficile à UILabel de UIView.
Étape 5: - (Facultatif) Définissez la contrainte sur UIButton
1) avant 2) bas 3) arrière 4) hauteur fixe (vue principale)
Production :-
Remarque: - Assurez-vous que vous avez défini Nombre de lignes = 0 dans la propriété Label.
J'espère que ces informations suffisent pour comprendre Autoresize UIView selon la hauteur de UILabel et Autoresize UILabel selon le texte.
la source
Au lieu de cela, par programmation, vous pouvez le faire dans Storyboard / XIB lors de la conception.
la source
Merci les gars pour votre aide, voici le code que j'ai essayé et qui fonctionne pour moi
la source
Solution à iOS7 antérieure et iOS7 ci-dessus
la source
Puisque sizeWithFont est obsolète, j'utilise celui-ci à la place.
celui-ci obtient des attributs spécifiques à l'étiquette.
la source
Voici une version catégorie:
UILabel + AutoSize.h #import
UILabel + AutoSize.m
la source
Vous pouvez implémenter la
TableViewController's
(UITableViewCell *)tableView:cellForRowAtIndexPath
méthode de la manière suivante (par exemple):Utilisez également
NSString
lasizeWithFont:constrainedToSize:lineBreakMode:
méthode de pour calculer la hauteur du texte.la source
Extension UILabel basée sur cette réponse pour Swift 4 et supérieur
Peut être utilisé comme:
la source
Et pour ceux qui migrent vers iOS 8, voici une extension de classe pour Swift:
la source
Le moyen le plus simple et le plus efficace pour moi a été d'appliquer une contrainte de hauteur à l'étiquette et de définir la priorité sur faible , c'est-à-dire (250) dans le storyboard.
Vous n'avez donc pas à vous soucier de calculer la hauteur et la largeur par programme, grâce au storyboard.
la source
Mon approche pour calculer la hauteur dynamique de UILabel.
Envelopper pour fonctionner:
la source
Méthode mise à jour
la source
Ceci est une ligne de code pour obtenir la hauteur UILabel en utilisant Objective-c:
et en utilisant .height, vous obtiendrez la hauteur de l'étiquette comme suit:
la source
Vous pouvez obtenir la hauteur en utilisant le code ci-dessous
Vous devez passer
texte 2. police 3. largeur d'étiquette
la source
Merci pour ce post. Cela m'a beaucoup aidé. Dans mon cas, je modifie également le texte dans un contrôleur de vue séparé. J'ai remarqué que lorsque j'utilise:
dans la tableView: cellForRowAtIndexPath: méthode selon laquelle la vue d'étiquette était continuellement rendue au-dessus de la vue précédente chaque fois que je modifiais la cellule. Le texte est devenu pixélisé et lorsque quelque chose a été supprimé ou modifié, la version précédente était visible sous la nouvelle version. Voici comment j'ai résolu le problème:
Plus de superposition bizarre. S'il existe une meilleure façon de gérer cela, faites-le moi savoir.
la source
utilisez ceci ici toutes les propriétés sont utilisées sur l'étiquette et testez-la en augmentant le texte dans le itemTitle.text comme
il montrera la réponse parfaite comme vous avez besoin
la source
Vous pouvez également l'utiliser comme méthode. @Pyjamasam est tout à fait vrai, donc je fais juste sa méthode. Cela peut être utile pour quelqu'un d'autre
et le mettre comme ça
la source
Pour ce faire dans Swift3, voici le code:
la source
Ajout aux réponses ci-dessus:
Cela peut être facilement réalisé via le storyboard.
la source
Une ligne est la réponse de Chris est fausse.
devrait être
A part ça, c'est la bonne solution.
la source
Enfin, cela a fonctionné. Merci les gars.
Je ne le faisais pas fonctionner parce que j'essayais de redimensionner l'étiquette dans la
heightForRowAtIndexPath
méthode:et (ouais idiot moi), je redimensionnais l'étiquette par défaut dans la
cellForRowAtIndexPath
méthode - je négligeais le code que j'avais écrit plus tôt:la source
la source
la source
Mon code:
la source
Cette méthode donnera une hauteur parfaite
la source
Swift 2:
Les lignes intéressantes sont
sizeToFit()
en conjonction avec le réglage de aframe.size.height
au flottant max, cela donnera de la place pour le texte long, maissizeToFit()
le forcera à n'utiliser que le nécessaire, mais TOUJOURS l' appeler après avoir réglé le.frame.size.height
.Je recommande de définir un
.backgroundColor
à des fins de débogage, de cette façon, vous pouvez voir le cadre rendu pour chaque cas.la source
yourLabel.frame.height
est une propriété exclusiveVeuillez définir des contraintes pour UILable dans le storyboard, y compris en haut à gauche en bas à droite
la source