UITableView巧用技巧
1.取消屏幕内多余横线
- 当tableView数据未能满一屏幕的时候,UITableView会显示多余的横线,去掉多余的线同时又让有数据的cell有线,可以添加如下代码即可解决:
self.tableView.tableFooterView = [[UIView alloc]init];
2.tableView分割线顶格问题解决
- UITableView分割线默认不是直接顶格到左边,如果想让分割线顶格的话,iOS7之前我们只需要加上下面代码:
self.tableView.separatorInset = UIEdgeInsetsZero;
- 但这个方法在iOS7失效了,具体解决方法有如下常用两个:
方法一:去掉系统的分割线,自定义cell的分割线
- 这个应该是现在程序员最常用的方法吧,因为我们平时使用的cell大都是自定义的,然后在自定义cell的最下面加上一个高度为1的UIView来“冒充”分割线也是不错的方法
- 自定义的话还有一种方法就是将cell内容的高度小于cell的高度1个单位,用cell的背景色或者tableview的背景色“冒充”分割线,这种方法也比较快
方法er:设置分割线的内边剧
- 在下面的两个方法中分别设置tableView和cell的separatorInse和layoutMargins
- (void)viewDidLayoutSubviews{
[super viewDidLayoutSubviews];
// 让分割线顶格
self.tableV.separatorInset = UIEdgeInsetsMake(0, 0, 0, 0);
self.tableV.layoutMargins = UIEdgeInsetsMake(0, 0, 0, 0);
}
/** UITableViewDelegate */
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
cell.separatorInset = UIEdgeInsetsMake(0, 0, 0, 0);
cell.layoutMargins = UIEdgeInsetsMake(0, 0, 0, 0);
}
3.动态计算cell高度
– 很多情况下我们的UITableViewCell的高度是不确定的,如说一些聊天的界面,需要我们去动态的计算cell的高度,一般来说的话需要我们在-heightForRowAtIndexPath代理方法中返回你计算好的cell高度
- 当cell添加了约束后,我们可以通过下面代码让系统自动帮我们计算高度并显示相应高度:
self.tableView.estimatedRowHeight = 150;
self.tableView.rowHeight = UITableViewAutomaticDimension;
注意:如果你设置了上面属性,但cell并没有动态返回高度,请检查下cell内容的约束。
4.cell点击切换内容伸缩
- 我们的cell 有时候单单显示文字,而且文字有时单行,要求点击时出现多行全部文字内容,我们就可以在下面方法中通过改变cell中label的numberOfLines来实现动画效果
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
// 取消选中
[tableView deselectRowAtIndexPath:indexPath animated:YES];
ERCell *cell = [tableView cellForRowAtIndexPath:indexPath];
// 这里我是给cell的label添加了tag值,你也可以通过脱线获取label属性
UILabel *label = [cell viewWithTag:1000];
// 刷新数据
[tableView beginUpdates];
// 切换numberOfLines
if (label.numberOfLines == 0) {
label.numberOfLines = 1;
}else{
label.numberOfLines = 0;
}
// 结束刷新数据
[tableView endUpdates];
// [tableView reloadData];
}
注意:我这里用的刷新数据方法是 [tableView beginUpdates]; 和[tableView endUpdates];结合使用的,而不是直接使用[tableView reloadData]; 使用前者好处有如下:
- 1.前者自带动画效果
- 2.前者更流畅
网友评论