J'ai cherché la solution à ce problème dans le passé, mais je n'ai pas trouvé le bon.
Quelqu'un sait-il comment ajuster une taille UILabel
de manière dynamique pour l'adapter à la longueur du texte?
J'ai téléchargé la capture d'écran de ce que je ne veux pas (1ère ligne) et de ce que je veux (2ème ligne).
.__ J'apprécierais tout indice, conseil ou échantillon de code. Je vous remercie.
Ce que vous recherchez est la méthode UILabel sizeToFit
Je peux vous expliquer, mais la meilleure réponse pour savoir comment travailler avec UILabel est la suivante: https://stackoverflow.com/a/1054681/666479
C'est assez facile à faire avec la mise en page automatique. Pas besoin de faire quoi que ce soit dans le code.
Utilisez la mise en page automatique pour épingler les bords supérieur et gauche uniquement de chaque étiquette. N'ajoutez pas de contraintes pour la largeur et la hauteur. La taille du contenu intrinsèque de la vue s'en chargera.
Voici à quoi ressemblent les contraintes:
Le code n'a rien de spécial. Pas besoin d'utiliser sizeToFit
ou quoi que ce soit du genre.
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var labelOne: UILabel!
@IBOutlet weak var labelTwo: UILabel!
@IBOutlet weak var labelThree: UILabel!
@IBAction func changeTextButtonTapped(_ sender: UIButton) {
labelOne.text = "David"
labelTwo.text = "met"
labelThree.text = "her"
}
}
Utilisez cette classe UILabel
étendue:
//
// UILabelExtended.h
//
// Created by Prateek on 6/18/11.
#import <Foundation/Foundation.h>
/* **********************************************************************************************
This class inherit the class UILabel and extend the features of UILabel.
********************************************************************************************** */
@interface UILabelExtended : UILabel {
__unsafe_unretained id customDelegate;
id objectInfo;
SEL selector;
}
@property (nonatomic,assign) SEL selector;;
@property (nonatomic,assign) id customDelegate;
@property (nonatomic,retain) id objectInfo;
@end
@interface UILabel(UILabelCategory)
- (void)setHeightOfLabel;
- (void)setWidthOfLabel;
- (void)setHeightOfLabelWithMaxHeight:(float)maxHeight;
- (void)setWidthOfLabelWithMaxWidth:(float)maxWidth ;
@end
UILabelExtended.m
//
// Created by Prateek on 6/18/11.
//
#import "UILabelExtended.h"
@implementation UILabelExtended
@synthesize selector,customDelegate, objectInfo;
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
if(self.selector)
if([self.customDelegate respondsToSelector:self.selector]) {
[self.customDelegate performSelector:self.selector withObject:self];
return;
}
}
- (void)dealloc {
self.customDelegate = nil;
self.selector = NULL;
self.objectInfo = nil;
}
@end
@implementation UILabel(UILabelCategory)
- (void)setHeightOfLabel {
UILabel* label = self;
//get the height of label content
CGFloat height = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(label.bounds.size.width, 99999) lineBreakMode:NSLineBreakByWordWrapping].height;
//set the frame according to calculated height
CGRect frame = label.frame;
if([label.text length] > 0) {
frame.size.height = height;
}
else {
frame.size.height = 0;
}
label.frame = frame;
}
- (void)setWidthOfLabel {
UILabel* label = self;
//get the height of label content
CGFloat width = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(99999, label.bounds.size.height) lineBreakMode:NSLineBreakByWordWrapping].width;
//set the frame according to calculated height
CGRect frame = label.frame;
if([label.text length] > 0) {
frame.size.width = width+5;
}
else {
frame.size.width = 0;
}
label.frame = frame;
}
- (void)setHeightOfLabelWithMaxHeight:(float)maxHeight {
UILabel* label = self;
//get the height of label content
CGFloat height = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(label.bounds.size.width, maxHeight) lineBreakMode:NSLineBreakByWordWrapping].height;
//set the frame according to calculated height
CGRect frame = label.frame;
if([label.text length] > 0) {
if (height > maxHeight) {
frame.size.height = maxHeight;
}
else {
frame.size.height = height;
}
}
else {
frame.size.height = 0;
}
label.frame = frame;
}
- (void)setWidthOfLabelWithMaxWidth:(float)maxWidth {
UILabel* label = self;
//get the height of label content
CGFloat width = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(99999, label.bounds.size.height) lineBreakMode:NSLineBreakByWordWrapping].width;
//set the frame according to calculated height
CGRect frame = label.frame;
if([label.text length] > 0) {
if (width > maxWidth) {
frame.size.width = maxWidth;
}
else {
frame.size.width = width;
}
}
else {
frame.size.width = 0;
}
label.frame = frame;
}
@end
Méthodes d'utilisation: 1) définir le texte de
UILabel
2)[yourLBLObj setHeightOfLabel];
ou[yourLBLObj setWidthOfLabel];
Il définira automatiquement la hauteur ou la largeur en fonction du texte.
vous obtenez simplement calculer UILabel
width pour la taille de la chaîne, essayez ce code simple pour set UILabel
size
// Single line, no wrapping;
CGSize expectedLabelSize = [string sizeWithFont:yourFont];
// you get width,height in expectedLabelSize;
//expectedLabelSize.width,expectedLabelSize.height
essaye ça
NSString *text1 = [NSString stringWithFormat:@"%@",commentText];
CGSize constraint1 = CGSizeMake(280, 2000);
CGSize size1 = [text1 sizeWithFont:[UIFont systemFontOfSize:12] constrainedToSize:constraint1 lineBreakMode:UILineBreakModeWordWrap];
UILabel *lblComment = [[UILabel alloc] initWithFrame:CGRectMake(posx,posy,size1.width,size1.height)] ;
lblComment.lineBreakMode = UILineBreakModeWordWrap;
lblComment.numberOfLines = size1.height/15;
[lblComment setFont:[UIFont systemFontOfSize:12]];
lblComment.text = text1;
lblComment.tag = shareObjC.userId;
[lblComment setNeedsDisplay]
Tout ce que vous avez besoin de mettre juste le code de 2 lignes
lbl1.numberOfLines = 0
lbl1.sizeToFit()
Il gérera la largeur de l'étiquette selon son contenu.
J'espère que ça aide les autres :)
Vous pouvez utiliser cette partie de code pour calculer la largeur de l'étiquette et la définir
CGSize expectedLabelSize = [name sizeWithFont:yourfont constrainedToSize:maximumLabelSize];
// vous pouvez obtenir la largeur, la largeur, la hauteur de la valeur prévue de LabelLabelSize
Je travaille actuellement sur IOS-8 et de petites modifications ont été apportées à la réponse de @Suragch (vous devez utiliser la mise en page automatique pour que cela fonctionne).
Voici l'étape et la capture d'écran dans le résultat:
Il n'est pas nécessaire d'ajouter du code dans Swift, cela peut être fait dans le storyboard lui-même.