繁体   English   中英

UILabel截断文本不起作用

[英]UILabel truncate text not working

我在IB中将numberOfLines设置为1,但是当我将文本设置为长字符串时,它不会截断。 如果我将numberOfLines设置为2,则truncate工作正常。我该怎么做才能将长字符串截断为一行?

简单,设置以下属性:

label.adjustsFontSizeToFitWidth = NO;
label.lineBreakMode = NSLineBreakByTruncatingTail;

如果使用自动布局,在我的情况下,缺少约束。 如果没有在宽度/尾部设置约束,UILabel会增加其宽度。 一旦其宽度受限,例如其超视图,就会发生截断。

您可能对该部分中的标签有约束,这使得事情变得混乱。

仔细检查您的约束或删除该标签或该部分中的其他控件。

标签的故事板选项:“换行符:截断尾部”将用于您正在寻找的工作。

如果在IB中将标签的自动收缩设置为“固定字体大小”,则当字符串宽度超出标签宽度时,将始终获得截断。 我猜你碰巧把它设置为“Minimum Font Scale”或“Minimum Font Font”,当字符串太长时会导致调整大小。

在此输入图像描述

(Xcode 4.5,其他版本的Xcode和IB可能是不同的属性名称)

我有两个功能,可以帮助你完成你的工作。

基本:这个我为任务做的解决方案:
“将字体最小化到我的最小字体大小,然后尽可能多地放置信息,但不要大于最大宽度”

takeFineFont ...函数参数:
(UIFont*)font - 标签的字体( titleLabel.font
(NSString*)string - 标签中的文本( titleLabel.text
(CGSize)limitStringSize - 限制大小。
limitStringSize.width - 标签的宽度限制(上限)
limitStringSize.height - 标签的高度限制(下限)(实际上,字体大小)

-(UIFont*)takeFineFontSize:(UIFont*)font
              forText:(NSString*)string
             andLimit:(CGSize)limitStringSize{
    UIFont* resultFont = [UIFont fontWithName:[font fontName] size:[font pointSize]];
    if(limitStringSize.width != 0 && limitStringSize.height != 0){
        CGSize currentSize = [string sizeWithFont:resultFont];

        while(/* change font width with upper bound */
              currentSize.width > limitStringSize.width
              &&
              /* change font height with lower bound */
              currentSize.height > limitStringSize.height){

            /*change height and take new width*/
            currentSize.height -= 1;
            currentSize.width = [string sizeWithFont:[resultFont fontWithSize:currentSize.height]].width;
        }
        resultFont = [resultFont fontWithSize:currentSize.height];
    }
    return resultFont;
}
-(double)takeFineWidthForFont:(UIFont*)font
                    forString:(NSString*)string
                     andLimit:(double)widthLimit{
    return MIN([string sizeWithFont:font].width, widthLimit);
}

假设您在UILabel* titleLabel有大字符串
你在某处定义:

#define maximumLengthOfYourLabel 300
#define minimumSizeOfFont 14

你现在要做什么? 只是做这个代码的和平:

-(void)updateTitleLabelWithBigText:(NSString*)string{

    /*change text*/
    self.titleLabel.text = string;

    /*take pretty small font*/
    self.titleLabel.font = [self takeFineFontSize:self.titleLabel.font 
                                          forText:self.titleLabel.text 
                                         andLimit:CGSizeMake(maximumLengthOfYourLabel,minimumSizeOfFont)
                                          ];

    /*if your text still big, take minimal width and trunctate it*/
    self.titleLabel.width = [self takeFineWidthForFont:self.titleLabel.font
                                             forString:self.titleLabel.text
                                              andLimit:maximumLengthOfYourLabel];
    self.titleLabel.lineBreakMode = NSLineBreakByTruncatingTail;
}

如果您正在使用属性字符串并将段落样式设置为属性字符串:请确保传递paragraphStyle.lineBreakMode = .byTruncatingTail

确保您没有在标签上调用sizeToFit() 它将覆盖标签和约束设置。

将numberOfLines设置为0,这将允许您在不截断其宽度的情况下垂直扩展uilabel内容。

也许这种方法可以帮助你:

[myLabel sizeToFit];

标签不会被截断,但会调整标签大小以适合一行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM