如何在UILabel中截断文本

时间:2016-08-24 06:29:15

标签: ios uilabel line-breaks

我在UILabel中截断文字时遇到问题,即使我已完全设置lineBreakMode = NSLineBreakByWordWrapping

这是我的代码段:

lblSelectedText = [[UILabel alloc] init];
lblSelectedText.numberOfLines = 0;
lblSelectedText.lineBreakMode = NSLineBreakByWordWrapping;
lblSelectedText.font = [UIFont fontWithName:@"MyriadPro-Regular" size:(IS_IPAD_PRO?13.0:9.0)];
lblSelectedText.textAlignment = NSTextAlignmentCenter;
lblSelectedText.textColor = [UIColor lightGrayColor];
lblSelectedText.text = strKey; // Here text will be dynamic

CGFloat width = 150;
CGSize strSize = [self findHeightForText:strKey havingWidth:width andFont:lblSelectedText.font];
lblSelectedText.frame = CGRectMake(12, 10, CGRectGetWidth(aContainerController.view.frame)-20, strSize.height+15);


- (CGSize)findHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font
{
    CGSize size = CGSizeZero;
    if (text)
    {
        if (IS_ENGLISH) {
            CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:font } context:nil];
            size = CGSizeMake(frame.size.width, frame.size.height + 10);
        }
        else {
            CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:font } context:nil];
            size = CGSizeMake(frame.size.width, frame.size.height + 1);
        }
    }
    return size;
}

请注意,这些标签位于集合视图单元格中。这是一些参考图像。

image1

image2

如果有人解决了这个问题,请与我分享......

感谢。

2 个答案:

答案 0 :(得分:0)

正如你在评论中提到的,一些字符进入下一行意味着没有足够的宽度来填充单行中的每个字母,这就是为什么当你将行数设置为0时它会转到第二行(即多个线)。所以没有什么是错的。根据您在代码中设置的设置,这是正常的行为。

现在,如果您希望它不会转到第二行,请将numberOfLines属性设置为1

另一个选择是,您可以设置minimunScaleFactor 0 to 1来调整字体大小以适应可用的宽度。

你可以这样做,

label.adjustsFontSizeToFitWidth = YES;

label.minimumScaleFactor = 0.5f;

因此,它会将字体大小减小到实际宽度的一半。

尝试将linebreakmode更改为NSLineBreakByTruncatingTail而不是NSLineBreakByWordWrapping

答案 1 :(得分:0)

检查: -

label.minimumScaleFactor = 0.5f;

label.lineBreakMode = NSLineBreakByTruncatingMiddle;

[label sizeToFit];