UITableView中cell 高度自适应
2016-02-15 本文已影响848人
相关函数
在开发过程中,我们经常遇到,设置的UITableViewCell的内容不一样,从而造成无法正常和谐的显示,那么此时我们便需要是cell的高度根据内容进行自适应.
First
self.array = [NSArray arrayWithObjects:@"fgjadsfgdgfhsfhjsfhsadddgggggfdshgaredharsdfgggfredsfgsdfgrtdfgffgggsdfggsgggasdfgrsrhfdhfdcxgaefdascvhfdcggggggggjytrgfdhgdfgfhsgggsdfgadfgadgasfgsfgsfgsdfgasgs",@"dfajd'g;jna;dlje9pfjndas;hfa;gj'adsjgva'peifkvma;dghafdgsfgrgfagfafdggggggggggsfak;ejtggggggggd'a;sfg;ljgmnva",@"afdj'ajdfoe;wifknlvdcxgfhao;ewdjflkcmvnilraw",@"dfajs;dnlkgjewio;djvncasjkglvancdddasrefaghasfgarehyewdfscvxujhhhhcfghadfhgaewradgfvawcxgvreadwedf",@"dfahio;ewfu0iovhendgfvbujkawldsvcgioe;wajdfnvefujlefgwkdposm;lefwdv", nil];
这是我随便敲得字符,我们假设一个场景,我们需要使用UITableView展示一下数组中的文字.
Second
很明显每个元素的字符串长度都不一样,那么我们怎么能它在UITableView上和谐的展示,既不多余,有不缺少呢?
没有自适应之前是这样子的.
没有自适应这五个元素挤在一起,有的甚至没有展示出来.
Third
现在我们对它进行设置使cell自适应,很简单我们只需要计算出这些字符串的排在一起的高度就行了,而每一行的高度则取决于文字的高度.在开发中默认的文字大小是17号,我们只需要计算单个文字的高度然后乘以排好之后的行数就得到了cell的高度.
我们创建如下方法
// 传字符串,返回高度
-(CGFloat)textHeight:(NSString *)string{
// 计算字符串所占矩形区域的大小
CGRect rect = [string boundingRectWithSize:CGSizeMake(394, 10000) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:17]} context:nil];
// 返回高度
return rect.size.height;
}
关于,boundingRectWithSize,width的大小就是根据你的需求自定义的.height的大小让他足够大就好了,这只是一个范围.在这里我们设置为10000.
Fourth
在设置cell的高度的方法中设置cell的高度就好了.
heightForRow的方法会比cellForRow的方法先执行,所以我们需要先计算好cell的高度
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
// 1.先获取当前行所对应的字符串
NSString *str = _array[indexPath.row];
// 2.计算字符串的高度
CGFloat height = [self textHeight:str];
// 3.返回计算好的高度(加上空白区域的高度)
return height+20;
}
上面加20的高度,是因为我们想让它展示的更加和谐一些,所以上下各空出10的高度.
我们来看一下自适应之后的效果.
实现了cell高度自适应之后的效果Last
根据上面的方法我们就简单实现了cell高度的自适应,和谐的展示了不同大小的内容.感谢您的阅读,如果有疑问或者发现有错误,欢迎留言交流,指正.我将不胜感激.另转载请保留链接,谢谢!