web-dev-qa-db-ja.com

UILabelに改行を追加するには?

このような文字列があることを確認してください。

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

UILabelがこのようなメッセージを表示するようにするにはどうすればよいですか

AAAAA
BBBBB
CCCCC

\nがUILabelによって認識されているとは思わないので、USSが改行を作成する必要があることをUILabelが認識できるようにするためにNSStringの内部に配置できるものはありますか?

244
Thang Pham

enter image description here

改行(\ n)を挿入するには、Interface Builderの小さなボックスに入力するときにoption-returnを使用します。 Interface BuilderのLabel属性で、#Lines = 0を設定します。

ラベルを選択し、上の図のようにLinesプロパティを0に変更してから、文字列に\ nを使用して改行します。

261
Marco

XMLファイルから文字列を読み込む場合、この文字列の改行\nUILabelのテキストでは機能しません。 \nは改行に解析されません。

この問題を解決するためのちょっとしたコツがあります。

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

myLabel.text = myLabelText;

そのため、文字列内の未解析の\n部分を、ハードコードされたNSString内の解析済みの\nで置き換える必要があります。

これが私の他のラベル設定です。

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

最も重要なのは、numberOfLines0に設定することです(=ラベルの行数は無制限)。

なぜAppleがXMLから読み込まれた文字列の\nを解析しないことを選んだのかわかりませんか。

お役に立てれば。

130
Al-Noor Ladhani

インターフェースビルダーでは、あなたが使用することができます Ctrl + Enter 希望の位置に/nを挿入します。このようにして、次のような状況を実現できます。

ああ
aaaaaaa

102
kuokuo321

numberOfLinesプロパティにUILabelプロパティを設定する必要があります。デフォルトは1です。これをに設定すると、すべての制限が削除されます。

25
Dan

\nではなく/n(円記号)であることに注意してください。

22
AndyOng

Swift 2.2では、> iOS 8

StoryboardのAttribute Inspectorの下でLines = 0を設定し、参照アウトレットをラベルにリンクしました。その後、このようにコントローラで使用します。

 @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"
 }
8
CodeOverRide

// numberOfLinesをゼロに設定することを忘れないでください

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

こんな感じで

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

UILabelを使用する場合は、デフォルト設定が1行であることを覚えておく必要があります。したがって、追加するブレークの数(\nまたは\r)は関係ありません。そのため、2行以上に設定する必要があります。さらに行を追加することを許可しました。

1つの選択肢は、実際には複数行用のUITextViewを使用することです。

これはUILabelのXCode属性セクションで簡単に実現できます。スクリーンショットを参照してください。

enter image description here

3
meda

Xcode 6では、ワードラップを使うときは文字列の中でも\ nを使うことができます。それが動作します。だから、例えば:

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

label.numberOfLines = 0;を使うだけ

2
Fry

私の場合も\ nうまく動かなかった、私は行の数を0に保つことによって問題を修正し、コピーして、例えばHello\n World iの代わりに新しい行自体で貼り付けた。

こんにちは

世界

インターフェイスビルダーで。

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.

特に自動レイアウトを使用しているときにラベルフレームのサイズを変更するのは私にとっては間違っているようです。 appendFormatメソッドを使用する方が適切なようです。これが私の例です:

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

sizeWithFont:constrainedToSize:lineBreakMode:で問題を抱えている人、またはios 8に切り替える人(ios 7ではこの方法は推奨されていません)のために、代わりに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

UILableプロパティをPlainからAttributedに設定すると、UILabelの高さと幅がテキストを表示する画面領域に合わせて設定されている段落数に関係なく、UILabelは複数行のテキストを保持します。

0
BrainyMonkey

私は同じ問題に直面しました、そして、ここに、私がどのように問題を解決したかです。これが誰かに役立つことを願っています。

//スイフト2

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

// Objective-C

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

// C#(Xamarin.iOS)

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