280

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

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

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

AAAAA
BBBBB
CCCCC

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

4

21 に答える 21

343

文字列で使用\nしているとおりに使用します。

numberOfLinesを0に設定して、任意の数の行を許可します。

label.numberOfLines = 0;

を使用して、テキストのサイズに一致するようにラベルフレームを更新しますsizeWithFont:。これを行わないと、テキストは垂直方向の中央に配置されるか、切り取られます。

UILabel *label; // set frame to largest size you want
...
CGSize labelSize = [label.text sizeWithFont:label.font
                          constrainedToSize:label.frame.size
                              lineBreakMode:label.lineBreakMode];
label.frame = CGRectMake(
    label.frame.origin.x, label.frame.origin.y, 
    label.frame.size.width, labelSize.height);

更新:非推奨の代替品

sizeWithFont:constrainedToSize:lineBreakMode:

参照、非推奨のsizeWithFontの置き換え:iOS 7では?

CGSize labelSize = [label.text sizeWithAttributes:@{NSFontAttributeName:label.font}];

label.frame = CGRectMake(
    label.frame.origin.x, label.frame.origin.y, 
    label.frame.size.width, labelSize.height);
于 2010-02-23T00:50:13.617 に答える
292

ここに画像の説明を入力してください

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

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

于 2011-01-03T22:49:24.427 に答える
141

Interface Builderでは、Ctrl+Enterを使用して目的の位置に挿入でき/nます。この方法で、次の状況を実装できます

aaa
aaaaaaa

于 2015-09-14T10:14:37.473 に答える
135

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

この問題を解決するためのちょっとしたコツは次のとおりです。

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

myLabel.text = myLabelText;

\nしたがって、文字列内の解析されていない部分を\n、ハードコードされたで解析された部分に置き換える必要がありますNSString

他のラベル設定は次のとおりです。

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

最も重要なのは、(=ラベルの行数に制限はありません)に設定numberOfLinesすることです。0

\nAppleがXMLから読み取った文字列を解析しないことを選択した理由がわかりませんか?

お役に立てれば。

于 2011-01-04T00:29:38.927 に答える
26

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

于 2010-02-22T17:58:53.557 に答える
24

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

于 2010-05-10T11:02:47.537 に答える
12

Swift 2.2では、> iOS 8

ストーリーボードの属性インスペクターで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"
 }
于 2016-06-10T00:08:26.737 に答える
11

簡単な解決策が必要な場合は、InterfaceBuilderのテキストラベル入力ボックスで次の手順を実行してください。

行数が0に設定されていることを確認してください。

Alt+Enter

(Altはオプションキーです)

乾杯!

于 2020-03-31T03:38:57.860 に答える
7

このようにしてください

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;
于 2016-07-28T09:26:53.343 に答える
7

xCode 11では、Swift 5が正常に\n機能します。以下のコードを試してください:

textlabel.numberOfLines = 0
textlabel.text = "This is line one \n This is line two \n This is line three"
于 2020-01-04T18:36:47.747 に答える
6

//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];
于 2012-03-05T12:03:44.607 に答える
4

を使用しているUILabel場合は、デフォルト設定が1行であることを覚えておく必要があるため、追加するブレークの数(\nまたは\r)は関係ありません。追加できるように、複数行に設定されていることを確認する必要があります。より多くの行。

1つの代替手段は、UITextView実際には複数行を対象としたものを使用することです。

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

ここに画像の説明を入力してください

于 2013-10-25T16:19:46.540 に答える
4

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;
于 2015-07-22T09:47:49.327 に答える
3

私の場合も\nが機能していなかったので、行数を0に保ち、テキストをコピーして、たとえばHello \nWorldの代わりに新しい行自体で貼り付けて問題を修正しました。

こんにちは

世界

InterfaceBuilderで。

于 2015-08-15T08:12:06.583 に答える
2

使用するだけlabel.numberOfLines = 0;

于 2014-01-10T09:49:24.670 に答える
1
textLabel.text = @"\nAAAAA\nBBBBB\nCCCCC";
textLabel.numberOfLines = 3; \\As you want - AAAAA\nBBBBB\nCCCCC
textLabel.lineBreakMode = UILineBreakModeWordWrap;
NSLog(@"The textLabel text is - %@",textLabel.text);
于 2015-08-15T08:51:04.817 に答える
0

問題が発生する可能性のある他の人、sizeWithFont:constrainedToSize:lineBreakMode:またはios8に切り替える人(この方法はios7で非推奨)のために、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);
于 2014-07-15T23:38:51.413 に答える
0
NSCharacterSet *charSet = NSCharacterSet.newlineCharacterSet;
NSString *formatted = [[unformatted componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@"\n"];
于 2015-02-16T13:53:23.167 に答える
0

特に自動レイアウトを使用している場合、ラベルのフレームサイズを変更するのは間違っているようです。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;
于 2015-07-06T16:59:33.050 に答える
0

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

于 2015-08-11T11:12:34.187 に答える
0

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

//スイフト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;  
于 2015-12-07T10:27:52.330 に答える