如何删除UITableView中最后一个单元格的最后一个边框?

在我的应用程序,我使用UITableView我的问题是,我想删除UITableView中的最后一个单元格的最后一个边框。

请检查以下图片:

在这里输入图像说明

更新于9/14/15。 我原来的答案已经过时了,但它仍然是所有iOS版本的通用解决scheme:

您可以隐藏tableView的标准分隔线,并在每个单元格的顶部添加自定义行。 添加自定义分隔符最简单的方法是添加1px高度的简单UIView

 UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, cell.bounds.size.width, 1)]; separatorLineView.backgroundColor = [UIColor grayColor]; [cell.contentView addSubview:separatorLineView]; 

迄今为止,我订阅另一种隐藏单元格下方的额外分隔符的方法 (适用于iOS 6.1+):

 self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; 

最好的解决scheme是添加页脚视图。 以下代码完美地隐藏了最后一个单元格的行:

Objective-C的

 self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 1)]; 

Swift 4.0

 tableView.tableFooterView = UIView(frame: CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 1)) 

在iOS 7中有一个更简单的解决scheme。 假设细胞是你最后的细胞:

 cell.separatorInset = UIEdgeInsetsMake(0, cell.bounds.size.width, 0, 0); 

这适用于我在iOS 7和8:

 cell.separatorInset = UIEdgeInsetsMake(0, 0, 0, CGRectGetWidth(tableView.bounds)); 

注意:要小心使用tableView.bounds因为它有时会根据您何时调用它报告错误的值。 请参阅在横向模式下报告不正确的边界

不,你不能这样做。 这些分离器是非常切割和干燥,风格和颜色就是这样。 但是,另一种解决scheme可能是将所有单元全部closures,并在底部为除最后一个单元之外的所有单元设置水平线。

EX:

  [tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone]; if (indexPath.row == [myArray count] - 1) { UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"myImage.png"]]; [cell setBackgroundView:imageView]; } 

这是我目前使用的补救措施。 它可能不是最好的方法,但它的工作原理。

删除SeparatorColor和setSeparatorStyle来创build自定义分隔符

 - (void)viewDidLoad { [super viewDidLoad]; ... [self.tableView setSeparatorStyle:UITableViewCellSeparatorStyleNone]; [self.tableView setSeparatorColor:[UIColor clearColor]]; } 

添加自定义分隔符到tableview背景的每个单元格

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath]; ... UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, cell.frame.size.height-1, 320, 1)]; separatorLineView.backgroundColor = self.tableView.backgroundColor; [cell.contentView addSubview:separatorLineView]; return cell; } 

我的简短版本:

 self.tblView.tableFooterView = [UIView new]; 

对于iOS 7及以上版本

  -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { BOOL bIsLastRow = NO; //Add logic to check last row for your data source NSDictionary *dict = [_arrDataSource objectAtIndex:indexPath.section]; if([_arrDataSource lastObject] == dict) { bIsLastRow = YES; } //Set last row separate inset left value large, so it will go outside of view if ([cell respondsToSelector:@selector(setSeparatorInset:)]) { [cell setSeparatorInset:UIEdgeInsetsMake(0, bIsLastRow ? 1000 :0, 0, 0)]; } } 

下面的代码可以帮助我从UITableView的最后一行删除分隔符。

Swift 3.0

func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { if indexPath.row == tableView.numberOfRows(inSection: indexPath.section) { cell.separatorInset.right = cell.bounds.size.width } }

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

查找cellForRow委托中的最后一个单元索引,并从下面放置代码行:

 cell.separatorInset = UIEdgeInsetsMake( 0.f, 40.0f, 0.f, self.view.frame.size.width-40.0f ); 

另一种select是通过UITableView

 @synthesize hideLastSeparator = _hideLastSeparator; @synthesize hideLastSeparatorView = _hideLastSeparatorView; -(void)setHideLastSeparator:(BOOL)hideLastSeparator { if (_hideLastSeparator == hideLastSeparator) { return; } _hideLastSeparator = hideLastSeparator; if (_hideLastSeparator) { _hideLastSeparatorView = [[UIView alloc] initWithFrame:CGRectMake(0, self.contentSize.height, self.bounds.size.width, 0.5f)]; _hideLastSeparatorView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleBottomMargin; _hideLastSeparatorView.backgroundColor = self.backgroundColor; [self addSubview:_hideLastSeparatorView]; [self hideSeparator]; } else { [_hideLastSeparatorView removeFromSuperview]; _hideLastSeparatorView = nil; } } -(void)setContentSize:(CGSize)contentSize { [super setContentSize:contentSize]; if (_hideLastSeparator) { [self hideSeparator]; } } -(void)hideSeparator { CGRect frame = _hideLastSeparatorView.frame; frame.origin.y = self.contentSize.height - frame.size.height; _hideLastSeparatorView.frame = frame; } 

.h应该只包含hideLastSeparatorhideLastSeparatorView属性声明。
当想要隐藏分隔符时,使用新类并设置myTableView.hideLastSeparator = YES
这个工作的方式是通过添加一个新的视图来阻止最后一个分隔符。

在我看来,这比使用自定义分隔符(或者设置最后一个单元格的最后一个separatorInset)要容易一些,并且避免了设置tableFooterView有时会导致的一些奇怪的animation(例如在行插入/删除或其他表animation)。

在Swift中简单地说:

 tableView.tableFooterView = UIView() 

viewDidLoad()添加这一行代码。

 tableView.tableFooterView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: 0.001)) 

这确保最后一个分隔符将被replace和replace(不可见)页脚视图不会占用任何额外的高度。 由于页脚视图的宽度将由UITableViewpipe理,因此您可以将其设置为0。

在Tonny Xu的回答中展开,我有多个部分,这似乎是删除最后一个单元格分隔符

 if(indexPath.row == [self.tableView numberOfRowsInSection:indexPath.section] - 1) { self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 1)]; } 

cellForRowAtIndexPath数据源中