我可以强制UITableView隐藏空格之间的分隔符?

当使用单元格数量足够多的UITableView的普通样式的UITableView无法全部滚动显示它们时,单元格下方的空白区域中不会显示分隔符。 如果我只有几个单元格,它们下面的空白区域包含分隔符。

有没有办法,我可以强制一个UITableView删除空格中的分隔符? 如果没有,我将不得不加载一个自定义的背景,为每个单元格绘制一个分隔符,这将使其更难以inheritance行为。

我在这里发现了一个类似的问题,但我不能在我的实现中使用分组的UITableView

你可以通过为tableview定义页脚来达到你想要的效果。 看到这个答案的更多细节: 消除UITableView下面的额外分隔符

对于iOS 7. *和iOS 6.1

最简单的方法是设置tableFooterView属性:

 - (void)viewDidLoad { [super viewDidLoad]; // This will remove extra separators from tableview self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; } 

对于以前的版本

你可以将它添加到你的TableViewController(这将适用于任何数量的部分):

 - (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]; } 

对于Swift:

 override func viewDidLoad() { super.viewDidLoad() tableView.tableFooterView = UIView() // it's just 1 line, awesome! } 

使用丹尼尔的链接,我做了扩展,使其更加可用:

 //UITableViewController+Ext.m - (void)hideEmptySeparators { UIView *v = [[UIView alloc] initWithFrame:CGRectZero]; v.backgroundColor = [UIColor clearColor]; [self.tableView setTableFooterView:v]; [v release]; } 

经过一些testing,我发现大小可以是0,也可以。 所以它不会在表格末尾添加某种保证金。 所以谢谢wkw这个黑客。 我决定在这里发布,因为我不喜欢redirect。

Swift版本

最简单的方法是设置tableFooterView属性:

 override func viewDidLoad() { super.viewDidLoad() // This will remove extra separators from tableview self.tableView.tableFooterView = UIView(frame: CGRectZero) } 

如果你使用iOS 7 SDK,这是非常简单的。

只需在viewDidLoad方法中join这一行:

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

将表的separatorStyle设置为UITableViewCellSeparatorStyleNone (在代码或在IB)应该做的伎俩。

对于Swift:

 self.tableView.tableFooterView = UIView(frame: CGRectZero) 

我使用以下内容:

 UIView *view = [[UIView alloc] init]; myTableView.tableFooterView = view; [view release]; 

在viewDidLoad中做。 但是你可以把它放在任何地方。

对于这个问题,以下工作非常好:

 - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { CGRect frame = [self.view frame]; frame.size.height = frame.size.height - (kTableRowHeight * numberOfRowsInTable); UIView *footerView = [[UIView alloc] initWithFrame:frame]; return footerView; } 

其中kTableRowHeight是我的行单元格的高度,numberOfRowsInTable是我在表中的行数。

希望有所帮助,

布伦顿。