截面视图中的所有单元格都不会被返回

时间:2017-08-21 18:28:59

标签: ios uitableview swift3 spacing

我将tableview连接属性连接到我的viewcontroller类但是我无法让所有单元格在部分内返回。我希望每个单元格之间有10pix的边距,并且能够在另一个VC中成功完成,但是现在我使用的方法只返回一个单元格(总共只有2个单元格)所以我想帮助找出一种方法显示该部分中的所有单元格,代码包含在下面:

  //UITableViewDataSource

func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    let headerView = UIView()

    headerView.layer.cornerRadius = 8.0
    headerView.layer.masksToBounds = true
    headerView.backgroundColor = UIColor.colorWithHex("A171FF")

    let headerLabel = UILabel(frame: CGRect(x: 30, y: 0, width:
        tableView.bounds.size.width, height: tableView.bounds.size.height))
    headerLabel.font = UIFont(name: "Gill Sans", size: 15)
    headerLabel.textColor = UIColor.white
    headerLabel.text = self.tableView(self.myWldTbl, titleForHeaderInSection: section)
    headerLabel.sizeToFit()
    headerView.addSubview(headerLabel)

    return headerView
}

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

    return sections[section]
}

func numberOfSections(in tableView: UITableView) -> Int {
    return sections.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    switch (section) {
    case 0 :
    return userMoves.count
    case 1:
    return rsvps.count
    default :
    print("unable to set up sections")
    return 0
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    if indexPath.row % 2 != 0 {
        let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: MyWorldTableViewCell.self)) as! MyWorldTableViewCell

       //cell appearance
        cell.layer.cornerRadius = 8.0
        cell.clipsToBounds = true

       //cell data
    let evt = userMoves[indexPath.row]
    cell.rsvpCount.text = "\(rsvps.count)"

    //evt img
    if let evtImg = evt.event_photo_url {
        cell.img.kf.setImage(with: URL(string: Constants.Server.PHOTO_URL + evtImg))
    } else {
        cell.img.image = UIImage(named: "user_icon")
    }
    cell.ttl.text = evt.event_name!

    return cell } else  {
        let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: InvisibleCell.self)) as! InvisibleCell

        cell.backgroundColor = UIColor.clear

        return cell
    }
}


func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if indexPath.row % 2 == 0 {
        return 10.0
    }

    return 102.0
}

//UITableViewDelegate


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

1 个答案:

答案 0 :(得分:0)

编辑:

首先让您的代码感到困惑的是,您似乎有2个部分显示了2个不同数组的内容(根据numberOfRowsInSection中的逻辑),但您没有检查部分编号在cellForRowAt

在开始之前,您应该检查indexPath.section中的cellForRowAt以确保使用正确的数组。如上所述,您的代码使用userMoves数组来填充这两个部分。

您遗失的单元格的原因是您必须考虑numberOfRowsInSection方法中不可见的分隔符单元格。你有正确的想法乘以2:

switch (section) {
    case 0 :
        return userMoves.count * 2
    //etc
}

访问数组时,在cellForRowAt中,需要除以2以避免索引超出范围异常:

if indexPath.row % 2 != 0 {
    //dequeue, etc.

    let evt = userMoves[indexPath.row / 2]

    //etc.
}