当使用具有足够数量单元格的普通样式UITableView
时UITableView
无法在不滚动的情况下显示所有单元格时,单元格下方的空白区域中不会显示分隔符。如果我只有几个单元格,则它们下方的空白区域包含分隔符。
有没有办法可以强制UITableView
删除空白区域中的分隔符?如果不是,我将不得不加载一个自定义背景,并为每个单元格绘制一个分隔符,这将使其更难继承行为。
我发现了一个类似的问题here,但我在实施中无法使用分组UITableView
。
答案 0 :(得分:215)
最简单的方法是设置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];
}
答案 1 :(得分:120)
override func viewDidLoad() {
super.viewDidLoad()
tableView.tableFooterView = UIView() // it's just 1 line, awesome!
}
答案 2 :(得分:117)
您可以通过为tableview定义页脚来实现您想要的效果。有关详细信息,请参阅此答案:Eliminate Extra separators below UITableView
答案 3 :(得分:67)
使用Daniel的链接,我做了一个扩展,使它更有用:
//UITableViewController+Ext.m
- (void)hideEmptySeparators
{
UIView *v = [[UIView alloc] initWithFrame:CGRectZero];
v.backgroundColor = [UIColor clearColor];
[self.tableView setTableFooterView:v];
[v release];
}
经过一些测试,我发现尺寸可以是0,它也可以。所以它不会在表的末尾添加某种边距。所以,谢谢wkw这个黑客。我决定在这里发帖,因为我不喜欢重定向。
答案 4 :(得分:24)
Swift 版本
最简单的方法是设置tableFooterView属性:
override func viewDidLoad() {
super.viewDidLoad()
// This will remove extra separators from tableview
self.tableView.tableFooterView = UIView(frame: CGRectZero)
}
答案 5 :(得分:11)
对于Swift:
self.tableView.tableFooterView = UIView(frame: CGRectZero)
答案 6 :(得分:8)
如果你使用iOS 7 SDK,这很简单。
只需在viewDidLoad方法中添加以下行:
self.yourTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
答案 7 :(得分:7)
将表格的separatorStyle
设置为UITableViewCellSeparatorStyleNone
(在代码中或在IB中)应该可以解决问题。
答案 8 :(得分:5)
我使用以下内容:
UIView *view = [[UIView alloc] init];
myTableView.tableFooterView = view;
[view release];
在viewDidLoad中执行此操作。但你可以在任何地方设置它。
答案 9 :(得分:0)
以下这个问题对我来说非常有效:
- (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是我在表格中的行数。
希望有所帮助,
布伦顿。