1. 程式人生 > >iOS 7.0.4 和 7.1 上計算文字高度有誤差的解決方法

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 上計算文字高度的地方有誤差具體表現:

 

       第一張圖是在 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 .