在使用系统自带的UITableVIewCell的时候你有没有遇到过这样的困惑呢 ?
1.如何修改cell分割线的颜色 ?
2.如何能让cell的分割线左对齐?
3.如何单独让某个cell的分割线消失?
4.既设置了 cell.imageView 又设置了 cell.titleLabel.text 的cell 如何让分割线和图片左对齐,而不是和文字左对齐 ?
一.修改cell分割线的颜色
第一个问题十分简单,设置 self.tableView.separatorColor = [UIColor orangeColor]; 就可以设置cell分割线的颜色了.
二.cell的分割线左对齐
要解决第二个问题需要需要在tableView的代理方法中进行如下设置 :
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
[cell setSeparatorInset:UIEdgeInsetsZero];
}
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
}
if([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]){
[cell setPreservesSuperviewLayoutMargins:NO];
}
}
此时的效果图如下:
此时展示出来的有内容的cell 分割线都已经是左对齐的了. 但是还有一部分多余的cell的分割线并没有左对齐.
至于下面多余的cell的分割线有两种处理方式
1. 设置 self.tableView.tableFooterView = [[UIView alloc] init]; 可以直接把多余的cell隐藏掉. 这是一个非常有用的小技巧 , 更多使用小技巧可以查看 http://my.oschina.net/zhxx/blog/648764
2. 在viewDidLoad 方法中 设置:
if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[self.tableView setSeparatorInset:UIEdgeInsetsZero];
}
if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
[self.tableView setLayoutMargins:UIEdgeInsetsZero];
}
这样多余的cell 分割线就会左对齐了 .
通常我们用的都是第一种方法 把多余的cell 直接隐藏! 效果如图:
三.cell的分割线位置偏移
第三个问题和第四个问题性质类似所以就放在一起说了, 先看两张效果图 :
第五个cell分割线与图片左对齐(cell分割线左偏移) 隐藏某一行cell分割线.(cell分割线右偏移)
正常情况下, 当cell 既设置了 cell.imageView.image 又设置了 cell.titleLabel.text 时, 分割线默认是和 titleLabel左对齐的 , 如果要设置cell分割线和图片左对齐需要在cell的代理方法中设置:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellID];
cell.textLabel.text = [NSString stringWithFormat:@"这是第%ld个cell",indexPath.row + 1];
cell.imageView.image = [UIImage imageNamed:@"1"];
if (indexPath.row == 4) {
cell.separatorInset = UIEdgeInsetsMake(0, -100, 0, 0);
}
cell.imageView.clipsToBounds = YES;
return cell;
}
这里设置 UIEdgeInsetsMake(0, -100, 0, 0); 向左偏移的值为 -100 但是并没有向左边偏移了 -100的距离,原因和 问题二 中出现的现象原因一致 (内边距的原因) . 其实只要设置的值只要 只要大于一定的距离就可以保证 cell的分割线和图片是对齐的 .----> 距离 = cell.titleLabel的x值 - cell.imageView的x值. 当然这个值必须是负的.
如果想让cell的分割线向右偏移,在cell的代理方法中设置 cell.separatorInset = UIEdgeInsetsMake(0, 200, 0, 0); 如果想隐藏cell的分割线,设置向右的偏移量为 screenWidth 即可.需要注意的是: 此时 titleLabel的位置也会跟着偏移 . 效果见上图 右.
讲了这么多其实还有一种方法可以方便的解决以上各种问题,那就是自定义 cell . 虽然如此,但是对于大部分app,其设置页面完全不需要使用自定义cell的(使用自定义cell有点杀鸡焉用宰牛刀的感觉),掌握了cell的这些小技巧完全可以满足需求.
当然,具体情况还需具体分析,但是掌握这些技巧还是百利而无一害的.
个人总结,如有纰漏 请留言.