java 增加换行符_如何为UILabel添加换行符?

回答(19)

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

在字符串中使用 \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:

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);

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

37940b2a-9b3d-473d-912c-b3f72390a2db.png

在Interface Builder中的小方框中键入时,使用option-return插入换行符(\ n) . 在Interface Builder的Label属性中,设置#Lines = 0 .

选择标签,然后将Lines属性更改为0,如上图所示,然后在字符串中使用\ n进行换行 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

如果从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;

所以你必须用硬编码的 NSString 中的解析后的 \n 替换字符串中未解析的 \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 (=标签中无限数量的行) .

不知道为什么Apple选择不解析从XML读取的字符串中的 \n ?

希望这可以帮助 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

在界面构建器中,您可以使用Ctrl Enter将 /n 插入所需的位置 . 这种方式可以实现以下情况

AAA

AAAAAAA

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

您必须在 UILabel 上设置 numberOfLines 属性 . 默认值为 1 ,如果将其设置为 0 ,则会删除所有限制 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

重要的是要注意它是 \n (反斜杠)而不是 /n .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

在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"

}

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

//不要忘记将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];

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

就这样做吧

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;

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

如果你使用 UILabel 你必须记住默认设置是1行,那么你添加多少个中断并不重要( \n 或 \r ),你需要确保它被设置为多行,所以它可能是允许附加更多行 .

一种替代方法是使用 UITextView ,它真正用于多线 .

您可以在UILabel的XCode属性部分轻松实现此功能,请参见屏幕截图:

8962642c-fcfe-447c-9dd7-452964a4619b.png

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

在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;

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

只是使用 label.numberOfLines = 0;

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

textLabel.text = @"\nAAAAA\nBBBBB\nCCCCC";

textLabel.numberOfLines = 3; \\As you want - AAAAA\nBBBBB\nCCCCC

textLabel.lineBreakMode = UILineBreakModeWordWrap;

NSLog(@"The textLabel text is - %@",textLabel.text);

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

对于其他可能在 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);

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

NSCharacterSet *charSet = NSCharacterSet.newlineCharacterSet;

NSString *formatted = [[unformatted componentsSeparatedByCharactersInSet:charSet] componentsJoinedByString:@"\n"];

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

我更改标签框架尺寸似乎是错误的,尤其是在使用自动布局时 . 使用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;

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

如果将UILable属性从Plain设置为Attributed ... UILabel将保持多行文本,无论多少段落,因为您的UILabel高度和宽度设置为适合您要显示文本的屏幕区域 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

在我的情况下\ n也没有工作,我通过将行数保持为0来修复问题,并使用新行本身复制并粘贴文本,例如代替Hello \ n World i pasted

Hello World

在界面构建器中 .

e15298c6a3b4591803e154ab0c3b3e2e.png

2 years ago

我遇到了同样的问题,这就是我如何解决问题 . 希望这对某人有所帮助 .

//斯威夫特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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值