如果单词太长,NSLineBreakByWordWrapping 不起作用

NSLineBreakByWordWrapping not working if word is too long

您好,我正在尝试根据里面的文本调整字符串的大小。但是如果文本(像 link 这样的 1 字文本)对于我用来调整它的宽度来说太长了,如下所示;标签不适合它的尺寸。我使用的代码是;

UILabel *gettingSizeLabel = [[UILabel alloc] init];
gettingSizeLabel.font = [UIFont fontWithName:@"HelveticaNeue" size:14];
gettingSizeLabel.text = messageData.TEXT;
gettingSizeLabel.numberOfLines = 0;
gettingSizeLabel.lineBreakMode = NSLineBreakByWordWrapping | NSLineBreakByTruncatingTail;
CGSize maximumLabelSize = CGSizeMake(240, 9999);
CGSize expectSize = [gettingSizeLabel sizeThatFits:maximumLabelSize];

在我写的时候,我想将文本宽度调整为 240(最大),而且它需要是多行。但是结果可以算出240多。 谢谢

这一行是非法的:

gettingSizeLabel.lineBreakMode = NSLineBreakByWordWrapping | NSLineBreakByTruncatingTail;

lineBreakMode 不是位掩码。我很惊讶这甚至可以编译,但事实是它确实是切换到 Swift 的一个很好的理由,在这里不可能犯这个错误。

如果你修复它,它就可以正常工作(这是 Swift,但不会给你带来任何麻烦):

let s = "https://test.mobiletest.com/apps/12345678/install/abc123abc123abc123abc124"
let lab = UILabel()
lab.numberOfLines = 0
lab.text = s
lab.lineBreakMode = .ByWordWrapping
let result = lab.sizeThatFits(CGSizeMake(240,10000))
// (232.666666666667, 61.0)