次のような文字列があることを確認してください。
NSString *longStr = @"AAAAA\nBBBBB\nCCCCC";
UILabelが次のようなメッセージを表示するようにするにはどうすればよいですか?
AAAAA
BBBBB
CCCCC
UILabelによって認識されるとは思わない\n
ので、NSString内に入れて、UILabelが改行を作成する必要があることを認識できるようにするものはありますか?
次のような文字列があることを確認してください。
NSString *longStr = @"AAAAA\nBBBBB\nCCCCC";
UILabelが次のようなメッセージを表示するようにするにはどうすればよいですか?
AAAAA
BBBBB
CCCCC
UILabelによって認識されるとは思わない\n
ので、NSString内に入れて、UILabelが改行を作成する必要があることを認識できるようにするものはありますか?
文字列で使用\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);
Interface Builderでは、Ctrl+Enterを使用して目的の位置に挿入でき/n
ます。この方法で、次の状況を実装できます
aaa
aaaaaaa
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
\n
AppleがXMLから読み取った文字列を解析しないことを選択した理由がわかりませんか?
お役に立てれば。
numberOfLines
にプロパティを設定する必要がありますUILabel
。デフォルトは1です。これを0に設定すると、すべての制限が削除されます。
\n
ではなく(円記号)であることに注意してください/n
。
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"
}
簡単な解決策が必要な場合は、InterfaceBuilderのテキストラベル入力ボックスで次の手順を実行してください。
行数が0に設定されていることを確認してください。
Alt+Enter
(Altはオプションキーです)
乾杯!
このようにしてください
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;
xCode 11では、Swift 5が正常に\n
機能します。以下のコードを試してください:
textlabel.numberOfLines = 0
textlabel.text = "This is line one \n This is line two \n This is line three"
//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];
を使用しているUILabel
場合は、デフォルト設定が1行であることを覚えておく必要があるため、追加するブレークの数(\n
または\r
)は関係ありません。追加できるように、複数行に設定されていることを確認する必要があります。より多くの行。
1つの代替手段は、UITextView
実際には複数行を対象としたものを使用することです。
これは、UILabelのXCode属性セクションで簡単に実現できます。スクリーンショットを参照してください。
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;
私の場合も\nが機能していなかったので、行数を0に保ち、テキストをコピーして、たとえばHello \nWorldの代わりに新しい行自体で貼り付けて問題を修正しました。
こんにちは
世界
InterfaceBuilderで。
使用するだけlabel.numberOfLines = 0;
textLabel.text = @"\nAAAAA\nBBBBB\nCCCCC";
textLabel.numberOfLines = 3; \\As you want - AAAAA\nBBBBB\nCCCCC
textLabel.lineBreakMode = UILineBreakModeWordWrap;
NSLog(@"The textLabel text is - %@",textLabel.text);
問題が発生する可能性のある他の人、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);
NSCharacterSet *charSet = NSCharacterSet.newlineCharacterSet;
NSString *formatted = [[unformatted componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@"\n"];
特に自動レイアウトを使用している場合、ラベルのフレームサイズを変更するのは間違っているようです。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;
UILableプロパティをPlainからAttributedに設定した場合...UILabelの高さと幅がテキストを表示する画面領域に合うように設定されているため、UILabelは段落数に関係なく複数行のテキストを保持します。
私は同じ問題に直面しました、そしてここに私がどのように問題を解決したかがあります。これが誰かに役立つことを願っています。
//スイフト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;