iOS 7.0.4 和 7.1 上計算文字高度有誤差的解決方法
阿新 • • 發佈:2019-02-10
最近寫專案計算文字高度那裡在 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 .