8

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

4

9 回答 9

8

很简单,设置以下属性:

label.adjustsFontSizeToFitWidth = NO;
label.lineBreakMode = NSLineBreakByTruncatingTail;
于 2012-12-10T04:13:24.853 回答
6

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

于 2019-06-26T09:13:13.450 回答
5

如果使用自动布局,就我而言,缺少约束。如果没有对其宽度/尾随设置约束,则 UILabel 会增加其宽度。一旦它的宽度受到限制,例如它的超级视图,就会发生截断。

于 2016-03-07T12:58:58.990 回答
3

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

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

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

于 2014-10-14T13:18:20.550 回答
1

如果在 IB 中将标签的 autoshrink 设置为“Fixed Font Size”,则当字符串宽度超出标签宽度时,您将始终得到截断。我猜你碰巧将它设置为“最小字体比例”或“最小字体字体”,当字符串太长时会导致调整大小。

在此处输入图像描述

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

于 2012-12-10T04:19:54.443 回答
0

我做了两个函数,这将帮助你完成你的工作。

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

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;
}
于 2013-07-05T14:00:37.277 回答
0

确保你没有sizeToFit()在你的标签上打电话。它将覆盖标签和约束设置。

于 2019-08-01T16:36:21.550 回答
0

将 numberOfLines 设置为 0,这将使您可以垂直扩展 uilabel 内容而不会截断其宽度。

于 2019-08-06T10:31:09.877 回答
-6

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

[myLabel sizeToFit];

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

于 2012-12-10T04:11:43.003 回答