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];
试试这么用