Existe-t-il un moyen d'avoir plusieurs lignes de texte dans UILabel
comme dans le UITextView
ou devrais-je utiliser le second à la place?
J'ai trouvé une solution.
Il suffit d'ajouter le code suivant:
// Swift
textLabel.lineBreakMode = .ByWordWrapping // or NSLineBreakMode.ByWordWrapping
textLabel.numberOfLines = 0
// For Swift >= 3
textLabel.lineBreakMode = .byWordWrapping // notice the 'b' instead of 'B'
textLabel.numberOfLines = 0
// Objective-C
textLabel.lineBreakMode = NSLineBreakByWordWrapping;
textLabel.numberOfLines = 0;
// C# (Xamarin.iOS)
textLabel.LineBreakMode = UILineBreakMode.WordWrap;
textLabel.Lines = 0;
Ancienne réponse restaurée (pour référence et les développeurs souhaitant prendre en charge iOS au-dessous de 6.0):
textLabel.lineBreakMode = UILineBreakModeWordWrap;
textLabel.numberOfLines = 0;
Sur le côté: les deux valeurs enum donnent tout de même un 0
.
Dans IB, définissez le nombre de lignes sur 0 (autorise les lignes illimitées)
Lorsque vous tapez dans le champ de texte en utilisant IB, utilisez "alt-return" pour insérer un retour et allez à la ligne suivante (ou vous pouvez copier du texte déjà séparé par des lignes).
La meilleure solution que j'ai trouvée (à un problème autrement frustrant qui aurait dû être résolu dans le cadre) est similaire à celle de vaychick.
Il suffit de définir le nombre de lignes à 0 dans IB ou code
myLabel.numberOfLines = 0;
Cela affichera les lignes nécessaires mais repositionnera l'étiquette de sorte qu'elle soit centrée horizontalement (de sorte qu'une étiquette à 1 ligne et à 3 lignes soient alignées dans leur position horizontale). Pour résoudre ce problème, ajoutez:
CGRect currentFrame = myLabel.frame;
CGSize max = CGSizeMake(myLabel.frame.size.width, 500);
CGSize expected = [myString sizeWithFont:myLabel.font constrainedToSize:max lineBreakMode:myLabel.lineBreakMode];
currentFrame.size.height = expected.height;
myLabel.frame = currentFrame;
Utilisez ceci pour avoir plusieurs lignes de texte dans UILabel
:
textLabel.lineBreakMode = NSLineBreakByWordWrapping;
textLabel.numberOfLines = 0;
Rapide:
textLabel.lineBreakMode = .byWordWrapping
textLabel.numberOfLines = 0
myUILabel.numberOfLines = 0;
myUILabel.text = @"your long string here";
[myUILabel sizeToFit];
Si vous devez utiliser le:
myLabel.numberOfLines = 0;
vous pouvez également utiliser un saut de ligne standard ("\n")
, en code, pour forcer une nouvelle ligne.
Vous pouvez utiliser \r
pour aller à la ligne suivante tout en remplissant la UILabel
en utilisant NSString
.
UILabel * label;
label.text = [NSString stringWithFormat:@"%@ \r %@",@"first line",@"seconcd line"];
Essayons ça
textLabel.lineBreakMode = NSLineBreakModeWordWrap; // UILineBreakModeWordWrap deprecated
textLabel.numberOfLines = 0;
textLabel.lineBreakMode = UILineBreakModeWordWrap;
textLabel.numberOfLines = 0;
La solution ci-dessus ne fonctionne pas dans mon cas. Je fais comme ça:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
// ...
CGSize size = [str sizeWithFont:[UIFont fontWithName:@"Georgia-Bold" size:18.0] constrainedToSize:CGSizeMake(240.0, 480.0) lineBreakMode:UILineBreakModeWordWrap];
return size.height + 20;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
// ...
cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
cell.textLabel.numberOfLines = 0;
cell.textLabel.font = [UIFont fontWithName:@"Georgia-Bold" size:18.0];
}
// ...
UILabel *textLabel = [cell textLabel];
CGSize size = [text sizeWithFont:[UIFont fontWithName:@"Georgia-Bold" size:18.0]
constrainedToSize:CGSizeMake(240.0, 480.0)
lineBreakMode:UILineBreakModeWordWrap];
cell.textLabel.frame = CGRectMake(0, 0, size.width + 20, size.height + 20);
//...
}
Utilisez story borad: sélectionnez l’étiquette pour définir le nombre de lignes à zéro ...... ou reportez-vous à ceci
UILabel *helpLabel = [[UILabel alloc] init];
NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:label];
helpLabel.attributedText = attrString;
// helpLabel.text = label;
helpLabel.textAlignment = NSTextAlignmentCenter;
helpLabel.lineBreakMode = NSLineBreakByWordWrapping;
helpLabel.numberOfLines = 0;
Pour certaines raisons, cela ne fonctionne pas pour moi dans iOS 6, je ne sais pas pourquoi. Essayé avec et sans texte attribué. Aucune suggestion.
Swift 3
Définissez le nombre de lignes zéro pour les informations de texte dynamique, il sera utile pour faire varier le texte.
var label = UILabel()
let stringValue = "A label\nwith\nmultiline text."
label.text = stringValue
label.numberOfLines = 0
label.lineBreakMode = .byTruncatingTail // or .byWrappingWord
label.minimumScaleFactor = 0.8 . // It is not required but Nice to have a minimum scale factor to fit text into label frame
Try using this code:
lblName.numberOfLines = 0;
[lblName sizeToFit];
vous devriez essayer ceci:
-(CGFloat)dynamicLblHeight:(UILabel *)lbl
{
CGFloat lblWidth = lbl.frame.size.width;
CGRect lblTextSize = [lbl.text boundingRectWithSize:CGSizeMake(lblWidth, MAXFLOAT)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:lbl.font}
context:nil];
return lblTextSize.size.height;
}
Ces choses m'ont aidé
Changer ces propriétés de UILabel
label.numberOfLines = 0;
label.adjustsFontSizeToFitWidth = NO;
label.lineBreakMode = NSLineBreakByWordWrapping;
Et tout en donnant une chaîne, utilisez\n pour afficher différents mots sur différentes lignes.
Exemple :
NSString *message = @"This \n is \n a demo \n message for \n stackoverflow" ;
UILabel *labelName = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 30)];
[labelName sizeToFit];
labelName.numberOfLines = 0;
labelName.text = @"Your String...";
[self.view addSubview:labelName];
Vous pouvez aussi le faire via le Storyboard:
Je suis d'accord avec Jarred Olson, NSLineBreakByWordWrapping} est default . J'ai ajouté la propriété sizeToFit comme le guide de Gurumoorthy Arumugam pour le réparer.
Si vous souhaitez que la police à l’intérieur de votre étiquette s’ajuste pour s’adapter aux limites de l’étiquette. Vous pouvez utiliser :
textLabel.adjustsFontSizeToFitWidth = YES;
Merci a tous.
UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 150, 30)];
[textLabel sizeToFit];
textLabel.numberOfLines = 0;
textLabel.text = @"Your String...";
Placez ci-dessous soit dans le code, soit dans le storyboard lui-même
Label.lineBreakMode = NSLineBreakByWordWrapping; Label.numberOfLines = 0;
et n'oubliez pas de définir les contraintes gauche, droite, haut et bas pour l'étiquette, sinon cela ne fonctionnera pas.
Méthode 1:
extension UILabel {
func lblFunction() {
numberOfLines = 0
lineBreakMode = .byWordWrapping//If you want Word wraping
lineBreakMode = .byCharWrapping//If you want character wraping
}
}
Maintenant, appelez simplement comme ça
myLbl.lblFunction()//Replace your label name
Méthode 2:
Par programme
yourLabel.numberOfLines = 0
yourLabel.lineBreakMode = .byWordWrapping//If you want Word wraping
yourLabel.lineBreakMode = .byCharWrapping//If you want character wraping
Méthode 3:
À travers le story board
Pour afficher plusieurs lignes réglées sur 0 (zéro), cela affichera plus d'une ligne dans votre étiquette.
Si vous souhaitez afficher n lignes, définissez n.
Voir l'écran ci-dessous.
Si vous souhaitez définir une taille de police minimale pour l’étiquette Cliquez sur l’option Réduction automatique et sélectionnez la taille de police minimale
Voir les écrans ci-dessous
Ici définir la taille de police minimale
EX: 9 (Dans cette image)
Si votre étiquette reçoit plus de texte à ce moment-là, votre texte sera réduit jusqu'à 9.
Déjà répondu, mais vous pouvez aussi le faire manuellement dans le storyboard. Sous Inspecteur d'attributs pour le libellé, vous pouvez modifier les sauts de ligne en retour à la ligne (ou retour à la ligne).
Dans cette fonction, la chaîne de caractères que vous souhaitez affecter à l'étiquette et la taille de la police à la place de self.activityFont et la largeur de l'étiquette à la place de 235, vous obtenez maintenant la hauteur de l'étiquette en fonction de votre chaîne .
-(float)calculateLabelStringHeight:(NSString *)answer
{
CGRect textRect = [answer boundingRectWithSize: CGSizeMake(235, 10000000) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.activityFont} context:nil];
return textRect.size.height;
}
Swift 4:
label.lineBreakMode = .byWordWrapping
label.numberOfLines = 0
label.translatesAutoresizingMaskIntoConstraints = false
label.preferredMaxLayoutWidth = superview.bounds.size.width - 10
Sur C #, cela a fonctionné pour moi dans UITableViewCell.
UILabel myLabel = new UILabel();
myLabel.Font = UIFont.SystemFontOfSize(16);
myLabel.Lines = 0;
myLabel.TextAlignment = UITextAlignment.Left;
myLabel.LineBreakMode = UILineBreakMode.WordWrap;
myLabel.MinimumScaleFactor = 1;
myLabel.AdjustsFontSizeToFitWidth = true;
myLabel.InvalidateIntrinsicContentSize();
myLabel.Frame = new CoreGraphics.CGRect(20, mycell.ContentView.Frame.Y + 20, cell.ContentView.Frame.Size.Width - 40, mycell.ContentView.Frame.Size.Height);
myCell.ContentView.AddSubview(myLabel);
Je pense que le point ici est: -
myLabel.TextAlignment = UITextAlignment.Left;
myLabel.LineBreakMode = UILineBreakMode.WordWrap;
myLabel.MinimumScaleFactor = 1;
myLabel.AdjustsFontSizeToFitWidth = true;