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?
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.
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.
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
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.
Il est important de noter que c'est \n
(barre oblique inverse) plutôt que /n
.
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"
}
// 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];
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;
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:
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;
Juste en utilisant label.numberOfLines = 0;
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.
textLabel.text = @"\nAAAAA\nBBBBB\nCCCCC";
textLabel.numberOfLines = 3; \\As you want - AAAAA\nBBBBB\nCCCCC
textLabel.lineBreakMode = UILineBreakModeWordWrap;
NSLog(@"The textLabel text is - %@",textLabel.text);
NSCharacterSet *charSet = NSCharacterSet.newlineCharacterSet;
NSString *formatted = [[unformatted componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@"\n"];
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;
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);
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.
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;