ios – 根据字符串长度绘制UILabel

我使用drawRect绘制标签,代码如下所示.

if (productName && productName.length > 0) {
    UILabel *productNameLabel = [[UILabel alloc]init];
    productNameLabel.numberOfLines = 2;
    productNameLabel.attributedText = [self shadowedTextWithString:productName fontName:@"ProximaNovaA-Light" fontSize:productNameLabelFontSize isOfferType:NO];
    [productNameLabel sizeToFit];
    //drawing the UILabel
    [productNameLabel drawTextInRect:CGRectMake(25, labelYPosition, productNameLabel.frame.size.width, productNameLabel.frame.size.height)];
    CGContextTranslateCTM(UIGraphicsGetCurrentContext(), 25, labelYPosition);
    [productNameLabel.layer renderInContext:UIGraphicsGetCurrentContext()];
    CGContextTranslateCTM(UIGraphicsGetCurrentContext(), -25, -labelYPosition);

    labelYPosition += productNameLabel.frame.origin.y + productNameLabel.frame.size.height+20;
}

但是,productNameLabel.numberOfLiness = 2似乎根本不起作用…如果字符串的长度超过屏幕宽度,则文本将被截断并且UILabel保持一个衬垫.

任何人都知道我该怎么做,所以如果字符串的长度超过屏幕的宽度,超出的单词将转到第二行?

谢谢!

更新的代码,仍然无法正常工作!

if (productName && productName.length > 0) {
    UILabel *productNameLabel = [[UILabel alloc]init];
    productNameLabel.lineBreakMode = YES;
    productNameLabel.numberOfLines = 0;
    NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
    style.lineBreakMode = NSLineBreakByTruncatingTail;
    NSMutableAttributedString *productNameAttributedString = [self shadowedTextWithString:productName fontName:@"ProximaNovaA-Light" fontSize:productNameLabelFontSize isOfferType:NO];

    [productNameAttributedString addAttribute:NSParagraphStyleAttributeName
                 value:style
                 range:NSMakeRange(0, productNameAttributedString.length)];

    productNameLabel.attributedText = productNameAttributedString;


    CGSize constrainedSize = CGSizeMake(paramImageView.image.size.width -50  , 9999);

    CGRect requiredHeight = [productNameLabel.attributedText boundingRectWithSize:constrainedSize options:NSStringDrawingUsesLineFragmentOrigin context:nil];

    if (requiredHeight.size.width > productNameLabel.frame.size.width) {
        requiredHeight = CGRectMake(25,labelYPosition, productNameLabel.frame.size.width, requiredHeight.size.height);
    }

    CGRect newFrame = productNameLabel.frame;
    newFrame.size.height = requiredHeight.size.height;
    productNameLabel.frame = newFrame;

    productNameLabel.backgroundColor = [UIColor redColor];

    [productNameLabel drawTextInRect:CGRectMake(25, labelYPosition, paramImageView.image.size.width-50, requiredHeight.size.height)];

    //[productNameLabel drawTextInRect:CGRectMake(25, labelYPosition, 30, productNameLabel.frame.size.height)];

    CGContextTranslateCTM(UIGraphicsGetCurrentContext(), 25, labelYPosition);
    [productNameLabel.layer renderInContext:UIGraphicsGetCurrentContext()];
    CGContextTranslateCTM(UIGraphicsGetCurrentContext(), -25, -labelYPosition);

    labelYPosition += productNameLabel.frame.origin.y + productNameLabel.frame.size.height+20;
}

最佳答案 Objective-C的

CGSize sizeToFit = 

;

Swift 2.2

var sizeToFit = title.sizeWithFont(productNameLabel.font, constrainedToSize: productNameLabel.frame.size, lineBreakMode: productNameLabel.lineBreakMode)

Swift3.0

var sizeToFit: CGSize = title.size(with: productNameLabel.font, constrainedTo: productNameLabel.frame.size, lineBreakMode: productNameLabel.lineBreakMode)
点赞