关于UITableViewCell 自适应内容高度时的注意点
来源:互联网 发布:mac windows双系统切换 编辑:程序博客网 时间:2024/05/21 22:45
最近在自定义UITableViewCell时,由于cell的高度需要随里面的内容文字的改变而改变,这也是网上很多关于可变高度的cell的实现点,关键在于如何获取可变UILabel的高度,实现如下(IOS7):
- (CGFloat)heigtOfLabelFromString:(NSString *)text labelWidth:(CGFloat)width{ CGSize constraint = CGSizeMake(width, 20000.0f); NSAttributedString *attributedText = [[NSAttributedString alloc]initWithString:text attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15]}]; CGRect rect = [attributedText boundingRectWithSize:constraint options:NSStringDrawingUsesLineFragmentOrigin context:nil]; CGSize size = rect.size; return size.height;}
IOS7之前版本则使用这个方法获取size:
CGSize requiredSize = [cell.myLabel.text sizeWithFont:[UIFont systemFontOfSize:15] constrainedToSize:boundSize lineBreakMode:UILineBreakModeWordWrap];
这样在获取到size后就可以将高度设置为cell的高度了。而对cell的初始化如下:
static NSString *cellId=@"cell";NoticeTableViewCell *cell = (NoticeTableViewCell*)[tableView dequeueReusableCellWithIdentifier:cellId];if (!cell) { cell = [[NoticeTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId]; }cell.contentLabel.text =[itemArray objectAtIndex:[indexPath row]];
但是实践后发现,当出现多个section,但每个section里面的cell样式都是同一个时,由于使用的是重用机制,如果每个section里面都重用同一个cell,那么问题就来了,当快速向上向下来回滑动并使某几个cell出现又消失时,整个table的cell就乱套了,某些cell的高度就变成了邻近cell的高度。这样整体就乱了。可能本人技术不给力的原因,导致检查了很久都找不出原因,后来才找出原因,当有多个section时,如果还是重用cell的话,一个section里面的cell同样会被其他section的cell 重用,这样导致本来在当前显示的section里cell高度可能是正确的但是其他的section里那些在同样位置但是没有显示在当前屏幕的cell就会重用之前正在显示的cell高度,导致乱套。貌似表达有点乱,还望有高人正确转述下意思。
鉴于此原因,后来将不同section的cell分开初始化和重用,当然采用不同的identifier,这样问题就解决了。不管再用多快的速度滑动也没有cell高度乱套了。
0 0
- 关于UITableViewCell 自适应内容高度时的注意点
- UITableViewCell自适应内容高度
- UITableViewCell根据内容自适应高度
- UITableViewCell 高度的自适应
- UITableViewCell的高度自适应
- 如何设置UITableViewCell中cell内容的自适应高度
- 关于UITableViewCell的自适应高度使用后的心得记录
- 关于UITableViewCell (xib) 自适应高度的问题
- 在自带的uitableviewcell上面加内容注意点
- Label的高度自适应和UItableViewCell的高度自适应
- UILabel高度的自适应以及UITableViewCell的高度自适应
- 实现自适应高度的 UITableViewCell 或 UILabel
- 实现自适应高度的 UITableViewCell 或 UILabel
- 实现自适应高度的 UITableViewCell 或 UILabel
- 实现自适应高度的 UITableViewCell 或 UILabel
- 实现自适应高度的 UITableViewCell 或 UILabel
- 实现自适应高度的 UITableViewCell 或 UILabel
- 实现自适应高度的 UITableViewCell 或 UILabel
- WaitForSingleObject或MsgWaitForMultipleObjects函数无返回,程序直接退出问题
- jsp前台注册检验
- 蔡英文:王金平没必要与马英九会商
- 电话广泛认同和研究员
- 排序之插入排序
- 关于UITableViewCell 自适应内容高度时的注意点
- 434134.12
- Linux内核代码笔记3----进程(未完成)
- 78321697
- ubuntu下监控:温度
- Linux内核代码笔记4----中断和异常
- 导出excel类
- hdu1385
- Linux内核代码笔记5----I/O体系结构和设备驱动模型