关于UITableFooterView的麻烦

时间:2017-03-03 01:41:09

标签: ios objective-c uitableview table-footer

在tableview中添加一个footerview后,如果表只有一个单元格,则页脚在单元格的底部显示一点高。无论桌子有多少个单元,如何让它显示在桌面的底部?

3 个答案:

答案 0 :(得分:0)

footerView只是背景,添加一个你真​​正想要的视图,就像这样:

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return 100
}

func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {

    let footerView = UIView.init()
    footerView.backgroundColor = .red

    // footerView is just the background, add a view that you really want
    let subView = UIView.init(frame: CGRect.init(x: 20, y: 20, width: UIScreen.main.bounds.width - 40, height: 100 - 40))
    subView.backgroundColor = .yellow
    footerView.addSubview(subView)

    return footerView
}

答案 1 :(得分:0)

这是我在tableFooterView上设置视图的代码及其工作正常。

@property (weak, nonatomic) IBOutlet UITableView *tblView;
@property (weak, nonatomic) IBOutlet UIView *viewTableFooterView;

- (void)viewDidLoad {
    [super viewDidLoad];
    _tblView.tableFooterView = _viewTableFooterView;
    _tblView.backgroundColor = [UIColor greenColor];
    [_tblView reloadData];
}


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

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"SimpleTableItem";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
    }

    cell.textLabel.text = [NSString stringWithFormat:@"%ld",(long)indexPath.row];
    return cell;
}

检查代码,如果它不适合您,请告诉我。

答案 2 :(得分:0)

这是因为您要添加的页脚视图是您在UITableView内显示的内容的页脚。话虽如此,有一种方法可以获得您想要的输出。您可以执行的操作是将UIView拖到故事板中添加的UITableViewCell下方,以显示为页脚。

设置UILabel的约束或您想要在此视图中显示的任何内容,我的意思是不添加固定的高度限制,否则您将获得恼人的布局中断警告。 复制此页脚视图并将其添加到UITableView的底部,并为其添加固定高度,使其成为您在UITableView中添加的页脚视图的副本。有点像这样:

enter image description here

现在,为页脚视图的这个高度约束创建一个插座到UIViewController

现在在你的viewDidLoad中你可以做的是检查添加单元格后UITableView的高度是否小于屏幕边界并相应地进行,如下所示:

- (void)viewDidLoad {

    [super viewDidLoad];

    //dont show footer view if cells are within screen bounds
    if (numberOfCells * cellHeight < [UIScreen mainScreen].bounds.size.height){

        UIView *footerView = mainTableView.tableFooterView;

        CGRect tempFrame = footerView.frame;

        tempFrame.size.height = 0.0f;

        footerView.frame = tempFrame;

        mainTableView.tableFooterView = footerView;

    }else{

        //dont show footerview below table view if cells are outside screen bounds
        [footerHeightConstraint setConstant:0.0f];
    }

}

注意:我错过了与高度相关的边缘情况,例如行*高度等于或小于屏幕边界的产品,所以你必须看一看在那。