隐藏删除分隔线,如果UITableViewCells是空的

我有一个UITableView ,我只有3行,我可以看到这3行。 问题是空的单元格:我可以在那里看到线条。 我不想看到这些线。

任何想法如何删除这些线?

下面是我正在寻找的图像。

图像链接

您可以使用以下代码片段中的任何一个来隐藏UITableView的标准分隔线。 添加自定义分隔符最简单的方法是添加一个简单的1px高度的UIView

 UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)]; separatorLineView.backgroundColor = [UIColor clearColor]; // set color as you want. [cell.contentView addSubview:separatorLineView]; 

要么

  self.tblView=[[UITableView alloc] initWithFrame:CGRectMake(0,0,320,370) style:UITableViewStylePlain]; self.tblView.delegate=self; self.tblView.dataSource=self; [self.view addSubview:self.tblView]; UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)]; v.backgroundColor = [UIColor clearColor]; [self.tblView setTableHeaderView:v]; [self.tblView setTableFooterView:v]; [v release]; 

要么

 - (float)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { // This will create a "invisible" footer return 0.01f; } - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { // To "clear" the footer view return [[UIView new] autorelease]; } 

要么

而且也检查nickfalk的答案 ,这是非常短暂和有益的。 而且你也应该尝试这一行,

 self.tableView.tableFooterView = [[UIView alloc] init]; 

不知道,但它适用于我检查的所有版本的iOS,iOS 5和更高版本,直到iOS 7。

甚至比Andrey Z的回复简单:只需在UITableView类中创build一个伪造的tableFooterView:

 self.tableFooterView = [UIView new]; // to hide empty cells 

和Swift:

tableFooterView = UIView()

透明UIView作为一个tableView页脚1px高度将做的伎俩。

 UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 1)]; v.backgroundColor = [UIColor clearColor]; [self.tableView setTableFooterView:v]; 
 self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; 

更新了swift和iOS 9的答案。这适用于.Plain品种的.Plain

  tableView.tableFooterView = UIView() 

使用此代码删除分隔线为空单元格。

  - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { // This will create a "invisible" footer return 0.01f; } - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { return [UIView new]; // If you are not using ARC: // return [[UIView new] autorelease]; } 

请尝试下面的代码:

 self.tblView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; if ([self.tblView respondsToSelector:@selector(setSeparatorInset:)]) { [self.tblView setSeparatorInset:UIEdgeInsetsZero]; } // write in view did load 

只是返回一个空的UIView()viewForFooterInSection为我工作:

 override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { return UIView() } 

您可以使用

 tableForBrands.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; 

它为我工作…

没有任何build议的答案适合我的类似问题。 在tableView委托中实现这个方法终于奏效了:

 - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { tableView.separatorStyle = UITableViewCellSeparatorStyleNone; } 

如果你正在使用故事板,你可以拖放一个UIView到你的单元格下面的UITableView,并将其高度设置为0.(仅在iOS 8项目中testing过)

我想这就是你要找的。

 - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ return 1.0f; } 

您可以将表视图分组,而不是普通的 – 这会稍微改变外观,但至less会删除额外的行。

我有这个确切的问题,并最终变成分组意见。 看起来好多了。

一些以前的build议包含一个大的概念错误:

如果你这样做:

[cell addSubview:….

即使一个单元格被“重用”,你也会为分隔符添加一个新的子视图!

避免在两个方面:

a)使用一个TA​​G,并且:1)要求该标签的子视图让divider = cell.viewWithTag(TAG)… 2)如果存在,不要添加另一个子视图3)如果不存在,则添加AND标签。

b)创build自定义视图,并在自定义单元格的“init”“awakeFromNib”中添加自定义分隔线。

代码a):

  if let divider = cell.viewWithTag(DIVIDER_TAG) as? UIView{ // nothing.. eventually change color bases in IndexPath... }else{ let frame = CGRectMake(0, cell.frame.height-1, cell.frame.width, 1) divider.tag = DIVIDER_TAG divider.backgroundColor = UIColor.redColor() cell.addSubview(divider) } 

Swift解决scheme:tableView.tableFooterView = UIView(frame:CGRectZero)

在Xcode 7.2上工作

在cellForRowAtIndexPath中

 let separatorLineView:UIView = UIView(frame: CGRectMake(0,0,self.tableview.bounds.width,0.5)) separatorLineView.backgroundColor = tableView.separatorColor cell!.contentView.addSubview(separatorLineView) 

UITableViewDataSource numberOfRowsInSection:方法中添加以下行。

 tableView.separatorColor = [UIColor clearColor];