UILabel有多条线来截断一个长字

yib*_*iqu 6 iphone ios

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

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

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

在此输入图像描述

MJL*_*yco 6

为了做你所要求的,你需要找出是否只有一个单词.如果有,将行数设置为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;
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)