自定义UITableView分隔符在视图加载时正确显示,但在单元格滚出视图并返回

时间:2017-06-22 11:43:46

标签: ios swift uitableview

我有一个我在TableViewController中实现的自定义分隔符,并希望将其隐藏在每个部分的最后一行,因为它会偏移我的自定义部分标题的显示。

我在故事板中使用了原型单元格,类型为TableViewController,单元格正在实现SessionTableViewCell标识符。

我也有一个自定义SessionTableViewCell课程,但目前这是空的。

我遇到的问题是,当TableView加载时当前代码有效,但当滚动到另一个部分然后再将分隔符应用到最后一个单元格时。

我认为问题在于在此方法中重用单元格,但我也尝试在我的SessionTableViewCell子类中创建分隔符,然后在我的TableViewController中引用它,但是同样的行为仍然存在。

SessionTableViewController.swift

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "SessionTableViewCell") as! SessionTableViewCell

    cell.sessionStartLabel.text = sessionData[indexPath.row].start
    cell.sessionEndLabel.text = sessionData[indexPath.row].end
    cell.sessionScoreLabel.text = sessionData[indexPath.row].score

    let screensize = UIScreen.main.bounds
    let separatorHeight = CGFloat(7.0)
    let customSeparator = UIView.init(frame: CGRect(x: 0, y: cell.bounds.size.height - separatorHeight, width: screensize.width, height: separatorHeight))
    customSeparator.backgroundColor = Config.tableViewBackgroundColor
    cell.addSubview(customSeparator)

    let rowsInSection = tableView.numberOfRows(inSection: indexPath.section)
    let lastRowInSection = rowsInSection - 1

    if indexPath.row != lastRowInSection {
        customSeparator.isHidden = false
    } else {
        customSeparator.isHidden = true
    }

    return cell
}

4 个答案:

答案 0 :(得分:1)

分隔符一次又一次地添加。 当您尝试隐藏分隔符时,它会隐藏最近添加的分隔符视图。 在awakeFromNib() SessionTableViewCell中创建您的分隔符,并将属性customSeparator添加为SessionTableViewCell的实例变量。 它应该工作正常。

答案 1 :(得分:0)

我认为我得到了你的问题,并提出了另一种选择:

  

您可以将部分页脚设置为空框架。 CGRectZero
  我用表格页脚实现了类似的场景。   对不起,我是swift的新手,稍后会尝试发布一些快捷的代码。   与此同时,你可以尝试类似的东西:

self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

答案 2 :(得分:0)

尝试使用

self.tableView.tableFooterView = UIView()

答案 3 :(得分:0)

在添加

之前删除自定义分隔符
let customeView = cell.contentView.viewWithTag(200) as! UIView
if customeView != nil
{
    customeView.removeFromSuperview()
}
let screensize = UIScreen.main.bounds
let separatorHeight = CGFloat(7.0)
let customSeparator = UIView.init(frame: CGRect(x: 0, y: cell.bounds.size.height - separatorHeight, width: screensize.width, height: separatorHeight))
        customSeparator.backgroundColor = Config.tableViewBackgroundColor
customSeparator.tag = 200
cell.addSubview(customSeparator)