CELL⾃适应⾼度

来源:互联网 发布:用友软件怎么用 编辑:程序博客网 时间:2024/06/03 19:45
之前我们使⽤的cell⼀直都是同样的⾼度,或者某⾏固定⾼度。 实际开发中经常要让cell根据Model中⽂本的⻓短动态的更改⾼度.

为了实现这个要求, 我们需要计算⼀段⽂本在限定宽⾼内所占矩形⼤⼩. 

iOS7计算⽂本⾼度⽅法 - (CGRect)boundingRectWithSize:(CGSize)size options: (NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context

计算⽂本⾼度需要注意:
计算⽂本⾼度时所⽤的字体要和label显⽰时⽤的字体⼀致。
label的宽度要和计算时使⽤的限定宽度⼀致。
这样才能保证⽂本显⽰在label中时,label⾼度恰巧够。

tableView:heightForRowAtIndexPath:⽅法要⽐ tableView:cellForRowAtIndexPath先执⾏。 所以我们还要提前计算好每⾏cell需要多少⾼度。 

实现的效果:

代码如下: 
#import "MovieTableViewCell.h"@implementation MovieTableViewCell- (void)dealloc {    [_label release];    [super dealloc];}#pragma mark - 自定义初始化cell- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];    if (self) {               self.label = [[UILabel alloc] initWithFrame:(CGRectMake(20, 10,[UIScreen mainScreen].bounds.size.width - 40, 60))];        self.label.backgroundColor = [UIColor colorWithWhite:0.945 alpha:1.000];        self.label.numberOfLines = 0;        self.label.font = [UIFont systemFontOfSize:18];               [self.contentView addSubview:self.label];        [self.label release];    }    return self;}#pragma mark - 更改label的高度- (void)layoutSubviews {    [super layoutSubviews];    UIFont *fnt = [UIFont systemFontOfSize:18];    CGRect textSize = [self.label.text boundingRectWithSize:(CGSizeMake([UIScreen mainScreen].bounds.size.width - 40, 1000)) options:(NSStringDrawingUsesLineFragmentOrigin) attributes:[NSDictionary dictionaryWithObjectsAndKeys:fnt,NSFontAttributeName, nil] context:nil];    CGRect frame = self.label.frame;    frame.size.height = textSize.size.height;    self.label.frame = frame;}@end

#pragma mark - 将显示内容放入数组中- (void)setValueForArray {    self.dataNameArr = [NSMutableArray array];    [self.dataNameArr addObject:@"北京博纳影城朝阳门旗舰店\n\n北京市朝阳区三丰北里2号悠唐生活广场B1层朝阳门钱柜对面\n\n010-59775660"];    [self.dataNameArr addObject:@"北京橙天嘉禾吉彩影城\n\n北京海淀区玉海园五里22号配套商业楼(原吉彩体育馆\n\n"];    [self.dataNameArr addObject:@"首都电影院(金融街店)\n\n金融大街18号金融街购物中心二期地下一层\n\n010-66086662"];    [self.dataNameArr addObject:@"博纳国际影城通州店\n\n北京市通州区杨庄北里天时名苑14号楼F4-01\n\n010-56351916-800"];    [self.dataNameArr addObject:@"大地数字影院-北京望京新天地\n\n北京市朝阳区望京合生麒麟社影院\n\n010-57389734"];}

#pragma mark - 创建自定义的cell- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {    NSString *identifer = @"movieCell";    MovieTableViewCell *movieCell = [tableView dequeueReusableCellWithIdentifier:identifer];    if (movieCell == nil) {        movieCell = [[[MovieTableViewCell alloc] initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:identifer] autorelease];    }    movieCell.label.text = self.dataNameArr[indexPath.row];    return movieCell;}

#pragma mark - 设置frame的高度- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {    UIFont *fnt = [UIFont systemFontOfSize:18];    NSString *text = [self.dataNameArr objectAtIndex:indexPath.row];    CGRect textSize = [text boundingRectWithSize:(CGSizeMake([UIScreen mainScreen].bounds.size.width - 40, 10000)) options:(NSStringDrawingUsesLineFragmentOrigin) attributes:[NSDictionary dictionaryWithObjectsAndKeys:fnt,NSFontAttributeName, nil] context:nil];    CGFloat contentH = textSize.size.height;// 上下多留10px    return contentH + 20;}


0 0