在使用系统自带的UITableVIewCell的时候你有没有遇到过这样的困惑呢 ? app
1.如何修改cell分割线的颜色 ?spa
2.如何能让cell的分割线左对齐?.net
3.如何单独让某个cell的分割线消失?代理
4.既设置了 cell.imageView 又设置了 cell.titleLabel.text 的cell 如何让分割线和图片左对齐,而不是和文字左对齐 ?code
第一个问题十分简单,设置 self.tableView.separatorColor = [UIColor orangeColor]; 就能够设置cell分割线的颜色了.orm
要解决第二个问题须要须要在tableView的代理方法中进行以下设置 :blog
- (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的分割线并无左对齐. ip
至于下面多余的cell的分割线有两种处理方式 get
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.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的这些小技巧彻底能够知足需求.
固然,具体状况还需具体分析,可是掌握这些技巧仍是百利而无一害的.
我的总结,若有纰漏 请留言.