CELL⾃适应⾼度

之前我们使⽤的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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值