首页 > 计算字符串长宽的方法sizeWithAttributes:,返回的值不正确

计算字符串长宽的方法sizeWithAttributes:,返回的值不正确

iOS7以前,都用- (CGSize)sizeWithFont:(UIFont *)font方法得出字符串的宽和高,但时7以后这个方法被废除了,文档推荐使用- (CGSize)sizeWithAttributes:(NSDictionary *)attrs,但是经过最近使用,我发现对同一个字符串这两个方法求出的值竟然不一样。

现有一个按钮,是计算它的title文字的尺寸,代码如下:

//利用sizeWithAttributes:计算
    CGSize titleSize = [middleBtn.titleLabel.text sizeWithAttributes:@{@"NSFontAttributeName" : middleBtn.titleLabel.font                                                                     }];
    CGFloat titleWidth1 = titleSize.width;
    CGFloat titleHeight1 = titleSize.height;

////利用sizeWithFont:计算
    CGFloat titleWidth2 = [middleBtn.titleLabel.text sizeWithFont:middleBtn.titleLabel.font].width;
    CGFloat titleHeight2 = [middleBtn.titleLabel.text sizeWithFont:middleBtn.titleLabel.font].height;

    //打印
        RAPLog(@"%.2f, %.2f, %.2f,%.2f",titleWidth1, titleHeight1, titleWidth2, titleHeight2 );

打印结果如下

weibo[7860:277249] titleWidth1 = 36.00, titleHeight1 = 13.80, titleWidth2 = 51.00,titleHeight2 = 21.00

请问这是为何?以及如何在ios7以后求出和sizeWithFont相同的值?


好像是我傻逼了

@{@"NSFontAttributeName" : middleBtn.titleLabel.font}这里应该写成:

@{NSFontAttributeName : middleBtn.titleLabel.font}


NSDictionary *attributes = @{NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:14]};
// NSString class method: boundingRectWithSize:options:attributes:context is
// available only on ios7.0 sdk.
CGRect rect = [textToMeasure boundingRectWithSize:CGSizeMake(width, MAXFLOAT)
                                              options:NSStringDrawingUsesLineFragmentOrigin
                                           attributes:attributes
                                              context:nil];

试试这么用

【热门文章】
【热门文章】