web-dev-qa-db-fra.com

Comment ajouter un saut de ligne pour UILabel?

Voyons que j'ai une chaîne qui ressemble à ceci:

NSString *longStr = @"AAAAA\nBBBBB\nCCCCC";  

Comment puis-je faire en sorte que UILabel affiche le message comme ceci

AAAAA
BBBBB
CCCCC

Je ne pense pas que \n soit reconnu par UILabel. Y a-t-il quelque chose que je puisse mettre dans NSString afin qu'UILabel sache qu'il doit créer un saut de ligne à cet endroit?

250
Thang Pham

enter image description here

Utilisez option-return lors de la saisie dans la petite zone de Interface Builder pour insérer un saut de ligne (\ n). Dans les attributs Label d'Interface Builder, définissez # Lines = 0.

Sélectionnez l'étiquette, puis définissez la propriété Lines sur 0 comme dans l'image ci-dessus, puis utilisez\n dans votre chaîne pour le saut de ligne.

264
Marco

Si vous lisez une chaîne à partir d'un fichier XML, le saut de ligne \n dans cette chaîne ne fonctionnera pas dans le texte UILabel. Le \n n'est pas analysé comme un saut de ligne.

Voici un petit truc pour résoudre ce problème:

// correct next line \n in string from XML file
NSString *myNewLineStr = @"\n";
myLabelText = [myLabelText stringByReplacingOccurrencesOfString:@"\\n" withString:myNewLineStr];

myLabel.text = myLabelText;

Vous devez donc remplacer la partie \n non analysée de votre chaîne par un \n analysé dans un NSString codé en dur.

Voici mes autres paramètres d'étiquettes:

myLabel.numberOfLines = 0;
myLabel.backgroundColor = [UIColor lightGrayColor];
myLabel.textColor = [UIColor redColor]; 
myLabel.font = [UIFont fontWithName:@"Helvetica Neue" size:14.0];   
myLabel.textAlignment = UITextAlignmentCenter;

Le plus important est de définir numberOfLines sur 0 (= nombre illimité de lignes dans l’étiquette).

Vous ne savez pas pourquoi Apple a choisi de ne pas analyser \n dans les chaînes lues à partir de XML?

J'espère que cela t'aides.

131
Al-Noor Ladhani

Dans le constructeur d'interface, vous pouvez utiliser Ctrl + Enter insérer /n à la position souhaitée. De cette façon pourrait mettre en œuvre la situation suivante

aaa
aaaaaaa

106
kuokuo321

Vous devez définir la propriété numberOfLines sur UILabel. La valeur par défaut est 1, si vous le définissez sur , toutes les limites seront supprimées.

25
Dan

Il est important de noter que c'est \n (barre oblique inverse) plutôt que /n.

22
AndyOng

Dans Swift 2.2,> iOS 8

J'ai défini Lignes = 0 sur le storyboard, sous Inspecteur d'attributs, et lié un point de référence à l'étiquette. Puis utilisez dans le contrôleur comme ceci:

 @IBOutlet weak var listLabel: UILabel!

 override func viewDidLoad() {
      ...
      listLabel.text = "Line 1\nLine 2\nLine 3\nLine 4\nLine 5\nLine 6\nLine 7\nLine 8"
 }
9
CodeOverRide

// N'oubliez pas de mettre numberOfLines à zéro

UILabel* locationTitle = [[UILabel alloc] initWithFrame:CGRectMake(5, 30, 230, 40)];
locationTitle.font = [UIFont systemFontOfSize:13.0];
locationTitle.numberOfLines = 0;
locationTitle.text = [NSString stringWithFormat:@"Eaton industries pvt. Ltd \nUK Apr 12"];
[cell addSubview:locationTitle];
6
Pankaj Chauhan

Fais-le comme ça

NSString * strCheck = @"A\nB";

strCheck = [strCheck stringByReplacingOccurrencesOfString:@"\\n" withString:@"\n"];  //This is to prevent for fetching string from plist or data structure

label.numberOfLines = 0;

label.lineBreakMode = NSLineBreakByWordWrapping;

label.text = strCheck;
5
Sandip Patel - SM

Si vous utilisez un UILabel, vous devez vous rappeler que le paramètre par défaut est 1 ligne. Par conséquent, le nombre de sauts que vous ajoutez (\n ou \r) n'a pas d'importance. il est défini sur plus d'une ligne, ce qui permet d'ajouter d'autres lignes.

Une alternative consiste à utiliser UITextView qui est vraiment destiné aux multilignes.

Vous pouvez facilement y parvenir dans la section attribut XCode de UILabel, voir capture d'écran:

enter image description here

3
meda

Sur Xcode 6, vous pouvez simplement utiliser\n même à l’intérieur d’une chaîne lorsque vous utilisez Word Wrap. Ça va marcher. Donc par exemple:

UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, screenRect.size.width, 50)];
label.textAlignment = NSTextAlignmentCenter;
label.text = @"This will be on the first line\nfollowed by a line under it.";
label.lineBreakMode = UILineBreakModeWordWrap;
label.numberOfLines = 0;
3
Roi

Juste en utilisant label.numberOfLines = 0;

2
Fry

Dans mon cas également,\n ne fonctionnait pas, j’ai corrigé le problème en conservant le nombre de lignes à 0 et copié-collé le texte avec la nouvelle ligne elle-même, par exemple à la place de Hello\n World i collé

Salut

Monde

dans le constructeur d'interface.

2
Ranjithkumar
textLabel.text = @"\nAAAAA\nBBBBB\nCCCCC";
textLabel.numberOfLines = 3; \\As you want - AAAAA\nBBBBB\nCCCCC
textLabel.lineBreakMode = UILineBreakModeWordWrap;
NSLog(@"The textLabel text is - %@",textLabel.text);
1
user3182143
NSCharacterSet *charSet = NSCharacterSet.newlineCharacterSet;
NSString *formatted = [[unformatted componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@"\n"];
0
Grigori A.

Il me semble erroné de modifier la taille des cadres d'étiquettes, en particulier lors de l'utilisation de l'autolayout. L'utilisation de la méthode appendFormat semble plus appropriée. Voici mon exemple:

NSMutableString *list = [[NSMutableString alloc] init];
NSArray *textArray = @[@"AAAA", @"BBBB"];
for (NSString *string in textArray) {
    [list appendFormat:@"%@\n", string.mutableCopy];
}
self.label.text = list;
self.label.numberOfLines = 0;
0
tanya

Pour quiconque ayant des problèmes avec sizeWithFont:constrainedToSize:lineBreakMode: ou pour passer à ios8 (la méthode est obsolète à partir de ios7), j'ai ajusté ma taille en utilisant sizeToFit.

UILabel *label;
label.numberOfLines = 0;
// Setup label with desired settings
...
[label sizeToFit];
label.frame = CGRectMake(label.frame.Origin.x,     // Or use any desired Origin
                         label.frame.Origin.y, 
                         label.frame.size.width,   // Or use any desired width
                         label.frame.size.height);
0
user3842937

Si vous définissez vos propriétés UILable de Plain à Attributed ..., UILabel contiendra du texte multiligne, quel que soit le nombre de paragraphes correspondant à la hauteur et à la largeur de votre UILabel définies pour correspondre à la zone d'écran dans laquelle vous souhaitez afficher le texte.

0
BrainyMonkey

J'ai rencontré le même problème et voici comment j'ai résolu le problème. J'espère que cela sera utile pour quelqu'un.

// Swift 2

   lblMultiline.lineBreakMode = .ByWordWrapping // or use NSLineBreakMode.ByWordWrapping
   lblMultiline.numberOfLines = 0 

// Objectif c

  lblMultiline.lineBreakMode = NSLineBreakByWordWrapping;
  lblMultiline.numberOfLines = 0;

// C # (Xamarin.iOS)

  lblMultiline.LineBreakMode = UILineBreakMode.WordWrap;
  lblMultiline.Lines = 0;  
0
Suraj Sonawane