iOS 7.0.4 和 7.1 上计算文字高度有误差的解决方法


   最近写项目计算文字高度那里在 7.0.4 和 7.1 上遇见 文字高度 有误差的问题,一般写我就直接用系统提供的方法,计算高度,如下:

  

//得到文字的高度
+(NSValue*)getStringWithRect:(NSString*)aString
                   viewWidth:(NSInteger)width
                        font:(float)font
{
    CGSize size ;
    if (ISIOS7) {
        NSDictionary *attribute = @{NSFontAttributeName: [UIFont systemFontOfSize:font]};
        size = [aString boundingRectWithSize:CGSizeMake(width, 0)
                                     options:\
                NSStringDrawingTruncatesLastVisibleLine |
                NSStringDrawingUsesLineFragmentOrigin |
                NSStringDrawingUsesFontLeading
                                  attributes:attribute
                                     context:nil].size;
    }else{
        UIFont *nameFont = [UIFont systemFontOfSize:font];
        size=[aString sizeWithFont:nameFont constrainedToSize:CGSizeMake(width,1000) lineBreakMode:NSLineBreakByWordWrapping];
    }
    return [NSValue valueWithCGSize:size];
}

  但是现在运行在ios 7.0.4 和 7.1 上计算文字高度的地方有误差具体表现:

 iOS 7.0.4 和 7.1 上计算文字高度有误差的解决方法_第1张图片iOS 7.0.4 和 7.1 上计算文字高度有误差的解决方法_第2张图片


       第一张图是在 7.0.4  上运行的效果,第二张是6.1.3, 7.1 , 8.0,8.1 上运行的效果,我加断电查看 在不同的版本上计算的高度是一样的,但是最后显示出来的就是不一样的,有误差。经过研究发现把最后计算出来的高度加1或2的时候显示也是正常的,由此可以看出计算出来的高度没有得到最大值才出的错误

      具体解决方法:

    

//得到文字的高度
+(NSValue*)getStringWithRect:(NSString*)aString
                   viewWidth:(NSInteger)width
                        font:(float)font
{
    CGSize size ;
    if (ISIOS7) {
        NSDictionary *attribute = @{NSFontAttributeName: [UIFont systemFontOfSize:font]};
        size = [aString boundingRectWithSize:CGSizeMake(width, 0)
                                     options:\
                NSStringDrawingTruncatesLastVisibleLine |
                NSStringDrawingUsesLineFragmentOrigin |
                NSStringDrawingUsesFontLeading
                                  attributes:attribute
                                     context:nil].size;
        size.height = ceil(size.height);
    }else{
        //UIFont *nameFont=[UIFont fontWithName:@"Arial" size:font];
        UIFont *nameFont = [UIFont systemFontOfSize:font];
        size=[aString sizeWithFont:nameFont constrainedToSize:CGSizeMake(width,1000) lineBreakMode:NSLineBreakByWordWrapping];
    }
    return [NSValue valueWithCGSize:size];
}

上面加了句 size.height = ceil(size.height) ;就是最后的解决办法,  ceil  是 取上整 的函数,意思就是 计算出来的高度为 50.10999  , 60.888  最后得到的高度 是 51,61 .

你可能感兴趣的:(iOS)