UILabel adjustFont with multiline

时间:2016-03-15 11:21:15

标签: ios objective-c uilabel

我有一个UILabel,通常需要显示一两个单词。

很多时候,其中一个单词并不适合一行,所以我想减小字体大小,以便至少在一行中容纳每个单词(不按字符划分)。

使用http://beckyhansmeyer.com/2015/04/09/autoshrinking-text-in-a-multiline-uilabel/

中描述的技术
self.numberOfLines = 2;
self.lineBreakMode = NSLineBreakByTruncatingTail;
self.adjustsFontSizeToFitWidth = YES;
self.minimumScaleFactor = 0.65;

我发现当第二个单词不适合一行时它会很好用。

enter image description here

但是,当只有一个单词时,或者第一个单词就是那个单词时,它就没有了 这不合适。 enter image description here enter image description here

我设法解决了这样一句话的情况:

-(void)setText:(NSString *)text
{
    self.numberOfLines =  [text componentsSeparatedByString:@" "].count > 1 ? 2 : 1;
    [super setText:text];
}

但是我怎么能解决第一个单词不适合的情况呢?有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这个怎么样?

self.numberOfLines = [text componentsSeparatedByString:@" "].count;
[self setAdjustsFontSizeToFitWidth:YES];

但是,这将排除标签文本由两个非常小的单词组成的情况,例如。"如何"。在这种情况下,整个字符串将在第一行中可见。如果您要求在单独的行中显示每个单词,那么我建议您添加一个' \ n'在每个字之后。这意味着您必须在将字符串分配给标签之前对其进行编辑。因此,通用的解决方案可能是:

NSString *string = @"how are"; //Let this be the string
NSString *modifiedString = [string stringByReplacingOccurrencesOfString:@" " withString:@"\n"];
[self setText:modifiedString];
[self setTextAlignment:NSTextAlignmentCenter];
[self setAdjustsFontSizeToFitWidth:YES];
[self setNumberOfLines:0];
self.lineBreakMode = NSLineBreakByWordWrapping;