CELL⾃适应⾼度
2015-08-12 18:21
399 查看
之前我们使⽤的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需要多少⾼度。
实现的效果:
代码如下:
为了实现这个要求, 我们需要计算⼀段⽂本在限定宽⾼内所占矩形⼤⼩.
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; }
相关文章推荐
- WCF问题集锦:基础连接已经关闭 接收时发生错误
- C++易混淆的一点
- Java Servlet完全教程
- Chapter 16 notification iOS 8 -Swift Programming cookBook 读书笔记
- linux下用cmake
- css写三角形
- 自定义UITableViewCell(2) 多个自定义cell
- iOS到Android到底有多远
- 黑马程序员——面向对象(this关键字)-第11天
- 学习OpenGL好地址。
- findviewbyid()值为空的问题
- typedef的语法描述
- php中abstract与interface的区别
- iOS_关联使用(一)
- 如何通过View获取Controller
- android中Http和HttpClient的Get和Post方法的使用
- 求特定几何变换
- CSS里面逗号和分号的区别
- Xtradb+Haproxy高可用数据库集群(三)sysbench性能测试篇
- Xtradb+Haproxy高可用数据库集群(三)sysbench性能测试篇