7

我有一个UIlabel允许显示两行字符串的视图。但就我而言,只有一个长词。无论我将换行模式设置为UILineBreakModeTailTruncationor UILineBreakModeWordWrap,它总是将单词分成两行。像这样:“xxxxxx xx”我想在第一行截断它,像这样:“xxxx...”

有什么办法可以实现。在大多数情况下,它应该允许显示两行单词。

附加编辑:以下图为例。前两个标签是我所期望的:一个长词可以截断一行;可以在两行中显示多个短词。底部标签当前已发生。

在此处输入图像描述

4

4 回答 4

7

为了做你所要求的,你需要找出是否只有一个词。如果有,将行数设置为 1,自动收缩应该可以解决问题。如果没有,则将行数设置为 0。

例如

UILabel *label = [[UILabel alloc] init];
label.font = [UIFont systemFontOfSize:12.0];
label.adjustsFontSizeToFitWidth = YES;
label.minimumScaleFactor = 0.8;
label.text = NSLocalizedString(@"Information", @"E: 'Information'");
NSUInteger words = [label.text componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].count;
label.numberOfLines = (words == 1) ? 1 : 0;

斯威夫特 3.0

let label = UILabel()
label.font = UIFont.systemFont(ofSize: 12)
label.adjustsFontSizeToFitWidth = true
label.minimumScaleFactor = 0.8
label.text = NSLocalizedString("Information", comment: "E: 'Information'")
let words = label.text?.components(separatedBy: NSCharacterSet.whitespacesAndNewlines).count
label.numberOfLines = words == 1 ? 1 : 0
于 2015-03-18T17:59:10.690 回答
1

不要做任何事

设置第 1 行无中断模式

设置字体大小和最小字体大小相同

看图片在此处输入图像描述

在此处输入图像描述

于 2012-07-05T07:14:38.400 回答
0

将行数设置为 1 或不设置行数,默认为 1。换行模式为 UILineBreakModeTailTruncation... 并专门检查标签的宽度...。它不应该更大用作下列的 ...

  [lbl setFrame:CGRectMake:(10,10,50,30)];
  [lbl setLineBreakMode:UILineBreakModeTailTruncation];
  [lbl setNumberOfLines:1];

愿这能帮助你...

于 2012-07-05T07:16:47.847 回答
0

通过使标签更宽,您可以解决此问题。

[lbl setFrame:CGRectMake:(xPosition,yPosition,heightValue,21)];

[lbl setNumberOfLines:1];

在哪里

xPosition 和 yPosition 值是您为标签设置的值。

heightValue 是适当的值,它将正确对齐视图中的标签。

继续...

于 2012-07-05T07:28:27.490 回答