UILabel 多行文本缩放字体以适应 \n

Posted

技术标签:

【中文标题】UILabel 多行文本缩放字体以适应 \\n【英文标题】:UILabel Multiline Text Scale Font To Fit With \nUILabel 多行文本缩放字体以适应 \n 【发布时间】:2013-11-29 00:24:51 【问题描述】:

所以我试图让一些文字适合 我已经使用来自Resizing UILabel to fit with Word Wrap 的答案来使文本适合。这似乎可行,除了文本被大幅缩小并且仅占屏幕宽度的 50% 左右。

这是在视图控制器出现时运行的代码:

self.user.title = @"Jeffrey C. Louie\n2326 Rockford Road\nCharlestown, MA 02129";
[self.titleLabel setText:self.user.title];

NSInteger fsize = 200;
[self.titleLabel setFont:[UIFont fontWithName:self.titleLabel.font.fontName size:fsize]];

float height = [self.user.title sizeWithFont:self.titleLabel.font constrainedToSize:CGSizeMake(self.titleLabel.bounds.size.width, 99999) lineBreakMode:NSLineBreakByWordWrapping].height;

while (height > self.titleLabel.bounds.size.height && height != 0) 
    fsize -=1;
    [self.titleLabel setFont:[UIFont fontWithName:self.titleLabel.font.fontName size:fsize]];
    height = [self.user.title sizeWithFont:self.titleLabel.font constrainedToSize:CGSizeMake(self.titleLabel.bounds.size.width, 99999) lineBreakMode:NSLineBreakByWordWrapping].height;


for (NSString *word in [self.user.title componentsSeparatedByString:@" "]) 
    float width = [word sizeWithFont:self.titleLabel.font].width;
    while (width > self.titleLabel.bounds.size.width && width != 0) 
        fsize -= 3;
        [self.titleLabel setFont:[UIFont fontWithName:self.titleLabel.font.fontName size:fsize]];
        width = [word sizeWithFont:self.titleLabel.font].width;
    

在我看来,文本已被缩放以适合 1 行上的所有文本,就好像硬换行符不存在一样。有没有办法让 UILabel 知道有一个换行符并相应地缩放行文本?

谢谢

【问题讨论】:

【参考方案1】:

您可以使用RTLabel 而不是UILabel, 并将换行符替换为html<br> 标签。 喜欢:

RTLabel *label = [[RTLabel alloc] initWithFrame:/*your frame*/];
NSString htmlText = [yourText stringByReplacingOccurrencesOfString:@"\\n" withString:@"<br>"];
[label setText:htmlText];
[yourView addSubView:label];

【讨论】:

以上是关于UILabel 多行文本缩放字体以适应 \n的主要内容,如果未能解决你的问题,请参考以下文章

如何设置自适应多行 UILabel 文本?

调整UILabel的大小以适应字体大小和文本

Swift 3 - 调整字体大小以适应宽度,多行

多行 UILabel 没有正确换行 [重复]

如何计算字体大小以适应单文本行和多行弹性项目上的文本?

iOS-UILabel根据文本字体大小计算label宽度;以及自适应高度