UILabel有多行来截断一个长字

时间:2012-07-05 06:45:35

标签: iphone ios

我有一个UIlabel视图,可以显示两行字符串。但就我而言,只有一个长话。无论我将换行模式设置为UILineBreakModeTailTruncation还是UILineBreakModeWordWrap,它总是将单词分为两行。像这样: “XXXXXX XX” 我想在第一行截断它,如下所示: “XXXX ...”

有没有办法实现这一点。 在大多数情况下,它应该允许显示两行单词。

其他编辑: 以下图为例。前两个标签是我所期望的:一个长字可以在一行中截断;多个短词可以用两行显示。 底部标签目前正在发生。

enter image description here

4 个答案:

答案 0 :(得分:5)

为了做你要求的事情,你需要知道是否只有一个字。如果有,将行数设置为1,自动收缩应该解决问题。如果没有,则将行数设置为0。

e.g。

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;

Swift 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

答案 1 :(得分:1)

不要做任何事

设置第1行的编号 没有休息模式

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

查看图片enter image description here

enter image description here

答案 2 :(得分:0)

设置行数为1或者不设置行数默认为1.而换行模式将是UILineBreakModeTailTruncation ...并且特别检查标签的宽度....它不应该是更大的用途如下......

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

愿这对你有帮助......

答案 3 :(得分:0)

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

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

[lbl setNumberOfLines:1];

,其中

  

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

     

heightValue是适当的值,可以在视图中正确对齐标签。

继续...