我有一个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;
我发现当第二个单词不适合一行时它会很好用。
但是,当只有一个单词时,或者第一个单词就是那个单词时,它就没有了 这不合适。
我设法解决了这样一句话的情况:
-(void)setText:(NSString *)text
{
self.numberOfLines = [text componentsSeparatedByString:@" "].count > 1 ? 2 : 1;
[super setText:text];
}
但是我怎么能解决第一个单词不适合的情况呢?有什么想法吗?
答案 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;