Haven's Blog

此刻打吨,你将做梦;而此刻学习,你将圆梦. QQ交流群(疯狂IT人):93916004

iOS7计算字符串所占空间大小

| Comments

本站QQ技术群:<疯狂IT人>93916004

iOS7以前计算NSString所占size的API是NSString的成员方法

1
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode

现在iOS7中如果用这个方法计算,计算出来的值要比实际值小,所以可能出现显示不完全的效果。这是因为在iOS7中,上面这个方法已被新的API替代了。

1
- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context

下面的代码是一个示例,大家可以做为参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CGSize expectedLabelSize = CGSizeZero;
    
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
        NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
        paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
        NSDictionary *attributes = @{NSFontAttributeName:sideLabel.font, NSParagraphStyleAttributeName:paragraphStyle.copy};
        
        expectedLabelSize = [sideLabel.text boundingRectWithSize:CGSizeMake(260, 999) options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil].size;
    }
    else {
        expectedLabelSize = [sideLabel.text sizeWithFont:sideLabel.font
                                       constrainedToSize:CGSizeMake(260, 999)
                                           lineBreakMode:sideLabel.lineBreakMode];
    }

这样就正确了。

时间仓促,难免有不少错误,还往指正。若有问题,请留言或加入QQ技术群:<疯狂IT人>93916004

Comments