UITableView viewForFooterInSection 仅在滚动后显示

UITableView viewForFooterInSection only shows after scrolling

我有一个 UITableView,其中包含一个部分和足够多的行,需要滚动 tableView 才能到达底部。我想添加一个页脚视图,它会粘在 tableView 的底部并且始终可见,所以我实现了 viewForFooterInSection。这是我的代码:

- (UIView*)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    NSLog(@"Get footer view");

    if (tableView == [self tableView]) {
        return [self footerRowRightView];
    }
    else if (tableView == [self fixedColumnTableView]) {
        return [self footerRowLeftView];
    }

    return nil;
}

我遇到的问题是页脚视图仅在 tableView 滚动后显示,但我希望它从一开始就可见(即无论用户滚动与否始终浮动)。

一旦控制器出现并且 tableView 加载其数据,我就会在日志中看到 "Get footer view",所以我知道 viewForFooterInSection 被立即调用。我无法解决的是为什么它没有立即显示,以及如何让它显示。

在此先感谢您的帮助!

您需要的不是 tableview 的页脚。

只需在你的tableview的superview中添加这个header对应的view,并放在它的底部即可。然后只需降低 tableview 框架的高度以适应剩余的 space。它应该做到!

如果要粘贴页脚,则不能使用页脚视图。或者尝试使用分组表视图。

从其他答案的外观来看,有相当多的选择。只是为了添加我刚刚想出的一个 hacky 解决方法,我创建了将用作页脚的视图的副本,并将它们添加为我的主视图的子视图,恰好放置在真正的页脚视图的位置上。视图保留在属性中,因此在 scrollviewDidScroll 中我可以执行以下操作:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if ([self preScrollFooterLeftView]) {
        [[self preScrollFooterLeftView] removeFromSuperview];
    }

    if ([self preScrollFooterRightView]) {
        [[self preScrollFooterRightView] removeFromSuperview];
    }
}

这样,页脚似乎会立即显示。一旦用户滚动 tableView,假页脚就会被删除,显示其下方的真实页脚。如果 tableView 滚动到最后一行下方,真正的 header 会粘在该部分的底部,并在用户松开时弹回 tableView 的底部。

可能是您的页脚高度 return 编辑不正确。

检查你return来自heightForFooterInSection