ios - 计算字符串长宽的方法sizeWithAttributes:,返回的值不正确
怪我咯
怪我咯 2017-04-17 15:34:58
[iOS讨论组]

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相同的值?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
ringa_lee

好像是我傻逼了

@{@"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];

试试这么用

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号