我只是將文本高度計算函數包裝爲NSString
的類別。
在.h
文件:
@interface NSString (Additions)
- (CGSize)sizeWithFont:(UIFont *)font;
- (CGSize)sizeWithFontSize:(float)fSize constrainedToSize:(CGSize)cSize;
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)cSize;
@end
在.m
文件:
#import "NSString+Additions.h"
#define kSystemVersion ([[UIDevice currentDevice] systemVersion].intValue)
@implementation NSString (Additions)
- (CGSize)sizeWithFont:(UIFont *)font
{
return [self sizeWithFont:font constrainedToSize:(CGSize)
{MAXFLOAT, MAXFLOAT}];
}
- (CGSize)sizeWithFontSize:(float)fSize constrainedToSize:(CGSize)cSize
{
UIFont *font = [UIFont systemFontOfSize:fSize];
return [self sizeWithFont:font constrainedToSize:cSize];
}
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)cSize
{
if (kSystemVersion < 7)
{
CGSize size = [self sizeWithFont:font constrainedToSize:cSize
lineBreakMode:NSLineBreakByWordWrapping];
return size;
}
else
{
NSDictionary *stringAttributes = @{NSFontAttributeName:font};
CGRect rect = [self boundingRectWithSize:cSize
options:NSStringDrawingUsesLineFragmentOrigin |
NSStringDrawingUsesFontLeading
attributes:stringAttributes
context:nil];
return rect.size;
}
}
@end
然後,只需計算你想要的地方字符串的高度。如:
CGSize cSize = (CGSize){THE_LABEL_WIDTH_HERE, MAXFLOAT};
NSString *tmpString = @"Hello there. I'm junkor, and you can call me jun.";
// will use the system font
float height = [tmpString sizeWithFontSize:15 constrainedToSize:cSize].height;
高度是你想要的。有時,當你計算文本的大小,你可以緩存大小爲數據實體,如在tableView
的委託功能:當你重新載入數據
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
或滾動tableView
,它總是計算,對高度(或大小)進行緩存。確保每個文本只計算一次,這樣會更好。
http://stackoverflow.com/questions/23077829/calculate-tableview-list-cell-height-to-fit-string/23080315#23080315 – Nick