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
- CELL⾃适应⾼度
- 32.CELL⾃适应⾼度
- 31.UILable⾃适应⾼度
- UITableView中cell如何自动适应高度
- UITableView cell自动适应内容高度
- IOS TableView的Cell高度自适应,UILabel自动换行适应
- IOS TableView的Cell高度自适应,UILabel自动换行适应
- cell根据文本高度动态调整高度适应
- IOS TableView的Cell高度自适应,UILabel自动换行适应
- ios TableView的Cell高度自适应,UILabel自动换行适应
- IOS TableView的Cell高度自适应,UILabel自动换行适应
- IOS TableView的Cell高度自适应,UILabel自动换行适应
- IOS TableView的Cell高度自适应,UILabel自动换行适应
- iOS中Cell高度如何实现自动适应内容
- IOS TableView的Cell高度自适应,UILabel自动换行适应
- TableView的Cell高度自适应,UILabel自动换行适应
- UITableView中Lable自动换行,Cell自动适应高度
- IOS TableView的Cell高度自适应,UILabel自动换行适应
- HBase1.0以上版本的API改变
- Linux学习笔记---目录处理命令---删除文件或目录
- 关于使用openfiler作为共享存储来安装rac时的问题
- Java Servlet完全教程
- Chapter 16 notification iOS 8 -Swift Programming cookBook 读书笔记
- CELL⾃适应⾼度
- JMeter--web性能测试使用笔记
- [网狐]游戏添加方法
- Makefile中用宏定义进行条件编译(gcc -D)/在Makefile中进行宏定义-D
- Hadoop YARN新特性—label based scheduling
- C源码@数据结构与算法->队列(queue)
- Java
- Modeling with Sequence Diagram
- hadoop eclipse 插件