我可以强制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是我在表中的行数。
希望有所帮助,
布伦顿。