gpt4 book ai didi

ios - 带有多行的 UILabel adjustFont

转载 作者:行者123 更新时间:2023-11-29 01:08:43 25 4
gpt4 key购买 nike

我有一个 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];
}

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

最佳答案

这个怎么样?

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

但是,这将排除标签文本由两个非常小的单词组成的情况,例如“how are”。在这种情况下,整个字符串将在第一行本身中可见。如果您要求在单独的行中显示每个单词,那么我建议您在每个单词后添加“\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;

关于ios - 带有多行的 UILabel adjustFont,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36009826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com