-
tableview中cell的系统分隔线问题(分隔线顶满或者缩短)
//tableview代理方法,设置系统cell的分隔线 -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { if (0 == indexPath.section) { if (0 == indexPath.row) { //cell分隔线缩短50 if ([cell respondsToSelector:@selector(setSeparatorInset:)]) { [cell setSeparatorInset:UIEdgeInsetsMake(0, 50, 0, 0)]; } }else { //cell分割线顶满(分隔线加长) if ([cell respondsToSelector:@selector(setSeparatorInset:)]) { [cell setSeparatorInset:UIEdgeInsetsZero]; } if ([cell respondsToSelector:@selector(setLayoutMargins:)]) { [cell setLayoutMargins:UIEdgeInsetsZero]; } } }else if (1 == indexPath.section) { if (0 == indexPath.row) { if ([cell respondsToSelector:@selector(setSeparatorInset:)]) { [cell setSeparatorInset:UIEdgeInsetsZero]; } if ([cell respondsToSelector:@selector(setLayoutMargins:)]) { [cell setLayoutMargins:UIEdgeInsetsZero]; } } }else if (2 == indexPath.section){ if (0 == indexPath.row) { if ([cell respondsToSelector:@selector(setSeparatorInset:)]) { [cell setSeparatorInset:UIEdgeInsetsMake(0, 50, 0, 0)]; } } } }
-
tableview下面出现多余的cell(有分割线影响界面)
//隐藏多余cell -(void)setExtraCellLineHidden: (UITableView *)tableView { UIView *view = [UIView new]; view.backgroundColor = [UIColor clearColor]; [tableView setTableFooterView:view]; }
例如:
你要隐藏某个UITableView里面多余的cell
UITableView *tabelDemo = [[UITableView alloc] init];
[self.view addSubview:tabelDemo];
然后直接调用就可以了
[self setExtraCellLineHidden:tabelDemo]; -
tableview顶部空出的一部分高度(原因我猜有可能是因为系统自动布局计算了状态栏的高度)
//去掉tableview顶部高度多出的一部分
self.edgesForExtendedLayout = UIRectEdgeNone;(这里self指当前控制器,只需要在viewDidl
Load调用) -
swift版本:
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
cell.separatorInset = UIEdgeInsetsZero
cell.layoutMargins = UIEdgeInsetsZero
}
-
iOS 7开始UITableView的分割线不在从左侧边界开始了,而是默认空出了一段距离。
如果想要使用默认的分割线而且还要从左侧边界开始的话,有几种解决方式:
1、在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];
- }
- }
2、既设置tableView代理,又设置tableView属性
首先在初始化tableView的时候,加上如下这两句:
- if ([_tableView respondsToSelector:@selector(setSeparatorInset:)]) {
- [_tableView setSeparatorInset:UIEdgeInsetsZero];
- }
- if ([_tableView respondsToSelector:@selector(setLayoutMargins:)]) {
- [_tableView setLayoutMargins:UIEdgeInsetsZero];
- }
- - (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];
- }
- }
2、重写分割线
UITableView的分割线也是用UIView做的,具体可以看UITableView的层次结构,可以发现它其实是UITableViewCellSeparatorView,是cell的一个子视图。
- <_UITableViewCellSeparatorView: 0x7f9f5a64cf80; frame = (0 59.5; 200 0.5); layer = <CALayer: 0x7f9f5a627a80>>
这是我打印的demo中一个小tableView中的系统默认分割线的信息,猜测是UIView的某个子类,所以我们自定义一个UIView高度设置为0.5,添加到cell上即可。
参考链接:
1.http://blog.csdn.net/u011619283/article/details/51219811
2.http://jinqianchina.github.io/2016/03/22/UITableView%E4%BD%BF%E7%94%A8%E4%B8%AD%E7%9A%84%E4%B8%80%E4%BA%9B%E5%88%81%E4%B8%93%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93/