使用viewForFooterInSection时UITableView分隔符消失了

时间:2013-11-14 07:29:32

标签: ios objective-c uitableview

即使没有行,

UITableView也会显示分隔符。但是当我使用viewForFooterInSection时,分隔符就消失了。我希望它继续出现。我该怎么办?

enter image description here

当我在其中添加页脚时,这是我的代码:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 3;
}

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

    cell.textLabel.text = [NSString stringWithFormat:@"%d", indexPath.row + 1];
    cell.textLabel.textAlignment = NSTextAlignmentCenter;

    return cell;
}

// -------------------------- footer code start here --------------------------

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return 40;
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    UIView *view = [[UIView alloc] initWithFrame:CGRectZero];
    view.backgroundColor = [UIColor grayColor];

    UILabel *title = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, tableView.frame.size.width, 40)];
    title.text = @"footer here";
    title.textAlignment = NSTextAlignmentCenter;
    title.textColor = [UIColor whiteColor];
    [view addSubview:title];

    return view;
}

3 个答案:

答案 0 :(得分:0)

这个github项目可能会给你一些建议: CLTableWithFooterViewController  当然,如果您希望页脚始终显示在屏幕上,即使有很多单元格,也需要进行一些更改。

答案 1 :(得分:0)

删除- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section

使用此代码保持页脚向下(但始终可见)并保留分隔符:

@implementation tableView {

__weak UIView *_staticView;

}

- (void)viewDidLoad {

UIView *staticView = [[UIView alloc] initWithFrame:CGRectMake(0, self.tableView.bounds.size.height-50, self.tableView.bounds.size.width, 50)];
staticView.backgroundColor = [UIColor redColor];
//add other code for UILabel here

[self.tableView addSubview:staticView];
_staticView = staticView;
self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 50, 0);
} 

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
_staticView.transform = CGAffineTransformMakeTranslation(0, scrollView.contentOffset.y);
}

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
 {
// this is needed to prevent cells from being displayed above our static view
[self.tableView bringSubviewToFront:_staticView];
 }

答案 2 :(得分:0)

我猜你只有一个部分,对吗?在使用viewForFooterInSection之前,它只是向下填充空白单元格。但是当你调用viewForFooterInSection时,tableview会在该部分的末尾放置一个页脚。由于你没有第二部分,它会停止绘制任何单元格。所以你可以制作一个空白的第二部分,它会将空白单元格填充到第二部分。