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

时间:2009-10-27 22:09:40

标签: ios objective-c cocoa-touch uitableview

当使用具有足够数量单元格的普通样式UITableViewUITableView无法在不滚动的情况下显示所有单元格时,单元格下方的空白区域中不会显示分隔符。如果我只有几个单元格,则它们下方的空白区域包含分隔符。

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

我发现了一个类似的问题here,但我在实施中无法使用分组UITableView

10 个答案:

答案 0 :(得分:215)

适用于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];
}

答案 1 :(得分:120)

对于Swift:

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是我在表格中的行数。

希望有所帮助,

布伦顿。