如何为UILabel添加换行符?
让我看看我有一个string看起来像这样:
NSString *longStr = @"AAAAA\nBBBBB\nCCCCC";
我怎样才能让UILabel像这样显示消息
AAAAA
BBBBB
CCCCC
我不认为\n
被UILabel识别,那么有什么我可以放在NSString里面,这样UILabel知道它必须在那里创build一个换行符?
在你的string中使用\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);
更新:replace为弃用
sizeWithFont:constrainedToSize:lineBreakMode:
引用, replace为不推荐的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的小方框中input以插入换行(\ n)时使用选项返回。 在Interface Builder的标签属性中,设置#Lines = 0。
select标签,然后将Lines属性更改为0,如下图所示,然后在string中使用\ n作为换行符。
如果您从XML文件中读取string,则此string中的换行符\n
在UILabel
文本中将不起作用。 \n
不被parsing为换行符。
这是解决这个问题的小技巧:
// correct next line \n in string from XML file NSString *myNewLineStr = @"\n"; myLabelText = [myLabelText stringByReplacingOccurrencesOfString:@"\\n" withString:myNewLineStr]; myLabel.text = myLabelText;
所以你必须用硬编码的NSString
parsing的\n
replacestring中未parsing的\n
部分。
这是我的其他标签设置:
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
(=标签中的行数不限)。
不知道为什么苹果select不parsing从XML读取的string?
希望这可以帮助。
在界面生成器中,可以使用Ctrl + Enter将/n
插入到所需的位置。 这样可以实现以下情况
AAA
AAAAAAA
您必须在UILabel
上设置numberOfLines
属性。 默认值是1 ,如果将其设置为0 ,则会删除所有限制。
重要的是要注意它是\n
(反斜杠)而不是/n
。
//不要忘记将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];
在Swift 2.2中,> iOS 8
我已经在Storyboard上的属性检查器下设置Lines = 0,并将引用sockets连接到标签。 然后在这样的控制器中使用:
@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" }
如果您使用UILabel
,则必须记住默认设置为1行,因此添加多less个分支( \n
或\r
)无关紧要,因此您需要确保将其设置为多行,可以被允许追加更多的行。
一个替代scheme是使用UITextView
,这是真正意义上的多线。
你可以很容易地在UILabel的XCode属性部分实现这个function,看截图:
在Xcode 6上,当使用自动换行时,甚至可以在string中使用\ 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;
Just use like this :) 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;
只要使用label.numberOfLines = 0;
对于sizeWithFont:constrainedToSize:lineBreakMode:
可能有问题的其他人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将保留多行文本,而不pipeUILabel的高度和宽度设置为适合要显示文本的屏幕区域。
在我的情况下,\ n不工作,我通过保持行数为0来修复问题,并复制和粘贴文本与新行本身,而不是你好\ n世界我贴
你好
世界
在界面生成器中。
textLabel.text = @"\nAAAAA\nBBBBB\nCCCCC"; textLabel.numberOfLines = 3; \\As you want - AAAAA\nBBBBB\nCCCCC textLabel.lineBreakMode = UILineBreakModeWordWrap; NSLog(@"The textLabel text is - %@",textLabel.text);
我面临同样的问题,这里是我如何解决这个问题。 希望这会对某人有所帮助。
// Swift 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;