我在IB中将numberOfLines设置为1,但是当我将文本设置为长字符串时,它不会截断。如果我将numberOfLines设置为2,则truncate工作正常。我该怎么做才能将长字符串截断为一行?
答案 0 :(得分:6)
简单,设置以下属性:
label.adjustsFontSizeToFitWidth = NO;
label.lineBreakMode = NSLineBreakByTruncatingTail;
答案 1 :(得分:4)
如果使用自动布局,在我的情况下,缺少约束。如果没有在宽度/尾部设置约束,UILabel会增加其宽度。一旦其宽度受限,例如其超视图,就会发生截断。
答案 2 :(得分:3)
您可能对该部分中的标签有约束,这会使事情变得混乱。
仔细检查您的约束或删除该标签或该部分中的其他控件。
标签的故事板选项:“换行:截断尾部”将用于您正在寻找的工作。
答案 3 :(得分:1)
如果在IB中将标签的自动收缩设置为“固定字体大小”,则当字符串宽度超出标签宽度时,您将始终获得截断。我猜你碰巧把它设置为“Minimum Font Scale”或“Minimum Font Font”,当字符串太长时会导致调整大小。
(Xcode 4.5,其他版本的Xcode和IB可能是不同的属性名称)
答案 4 :(得分: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;
}
答案 5 :(得分:0)
如果您使用属性字符串并将段落样式设置为属性字符串:请确保您传递了paragraphStyle.lineBreakMode = .byTruncatingTail
。
答案 6 :(得分:0)
确保您没有在标签上拨打sizeToFit()
。它将覆盖标签和约束设置。
答案 7 :(得分:0)
将numberOfLines设置为0,这将使您可以垂直扩展uilabel内容,而不会缩短其宽度。
答案 8 :(得分:-5)
也许这种方法可以帮到你:
[myLabel sizeToFit];
标签不会被截断,但会调整标签大小以适合一行。