UITableView底部分隔符插入 - IOS 7中的奇怪行为

时间:2014-03-24 14:43:10

标签: ios objective-c uitableview ios7 uikit

我的应用包含UITableView,其中包含部分页脚。当用户滚动到tableView的底部时,有时在最后一个单元格和tableFooter之间会出现分隔符插入。这种行为不一致。

enter image description here

enter image description here

有没有办法强制此分隔符始终显示或永不显示?你们有没有注意到这种不一致的行为?对我来说似乎是一个错误。

EDIT
我正在使用

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    UILabel *footer = [[UILabel alloc] init];

    footer.backgroundColor = [UIColor whiteColor];

    footer.font = [footer.font fontWithSize:15];
    footer.textAlignment = NSTextAlignmentCenter;

    return footer;
}

但您只能使用

轻松重现相同的问题
- (NSString *)tableView:(UITableView *)tableView titleForFooterInSection:(NSInteger)section;

enter image description here

enter image description here

5 个答案:

答案 0 :(得分:0)

要执行此操作,您必须覆盖用作页脚的标准UIView

您可以通过覆盖委托方法-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section来完成此操作。

-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    UIView *myFooterView;

    // create a view with a label and without a line at the top etc...

    return myFooterView;
}

答案 1 :(得分:0)

我不确定为什么你会得到不一致的结果。也许尝试在页脚视图中添加背景。这是我的代码:

-(UIView *) tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    UIView *footerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 33)];
    [footerView setBackgroundColor:[UIColor grayColor]];
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, footerView.bounds.size.width, 20)];
    label.text = @"Footer";
    [label setTextAlignment:NSTextAlignmentCenter];

    [footerView addSubview:label];

    return footerView;
}

结果如下:

enter image description here

答案 2 :(得分:0)

这是一种懒惰的做法,但它仍然有效。

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifyer"];

    if (indexPath.row == tableArray.count) {
         cell.separatorStyle = UITableViewCellSeparatorStyleNone;
    }

    return cell;

}

答案 3 :(得分:0)

这是解决方案,非常简单!

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellIdentifyer"];

    cell.separatorInset = (indexPath.row == totalNumber-1) ? UIEdgeInsetsMake(0, INT16_MAX, 0, 0) : UIEdgeInsetsZero;

    return cell;

}

答案 4 :(得分:0)

我找到了一些解决方法:

每当你期望这个额外的分隔符出现时(例如,当用户像你描述的那样滚动到底部时) - 添加以下代码行:

tableView.separatorStyle = UITable​View​Cell​Separator​Style​None;
tableView.separatorStyle = UITable​View​Cell​Separator​Style​Single​Line;

逻辑是这样的:第一个代码串移除底部分隔符,第二个代码不添加它。在某些情况下它对我有用,但它不是100%修复。

我想,它也可能是一个Apple bug,因为有时候底部分隔符会在他们的“Reminders”应用中消失。