UITableView单元格计数不足

时间:2018-07-26 06:21:35

标签: ios swift uitableview uicollectionview

我目前正在使用两个原型单元,使顶部单元中的collectionView水平移动,而其他所有单元都垂直移动。底部仍然缺少一个单元格,我似乎无法弄清楚为什么。

这是代码。您能指出问题出在哪里吗?

//Mark:- Data arrays

var dataArray: [String] = ["c1","c2","c3","c4","c5"]
var cellArray: [String] = ["10","11","12","13","14","15"]

//Mark:- UITableView Delegate

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return cellArray.count
}

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

        return cell
    } else {
        let cell2 = tableView.dequeueReusableCell(withIdentifier: "CustomTableViewCell") as! CustomTableViewCell

        cell2.cellImage.image = UIImage(named: cellArray[indexPath.row])

        return cell2
    }
}

//Mark:- UICollectionView Delegate

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return dataArray.count
}

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "InsideCollectionViewCell", for: indexPath) as! InsideCollectionViewCell

    cell.myImage.image = UIImage(named: dataArray[indexPath.row])

    return cell
}

1 个答案:

答案 0 :(得分:1)

似乎您希望表视图包含cellArray数组中的值以及索引0处的一个额外的特殊行。

为此,您需要指出还有一个额外的行,并且您的索引需要考虑该额外的行。

但是更简单的方法是在表格视图中使用多个部分。将第0部分用于额外的特殊行,并将第1部分用于您的cellArray中的值。

func numberOfSections(in tableView: UITableView) -> Int {
    return 2
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return section == 0 ? 1 : cellArray.count
}

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

        return cell
    } else {
        let cell2 = tableView.dequeueReusableCell(withIdentifier: "CustomTableViewCell") as! CustomTableViewCell

        cell2.cellImage.image = UIImage(named: cellArray[indexPath.row])

        return cell2
    }
}

确保在您可能实现的任何其他表格视图方法(例如didSelectRowAt等中)调整使用多个节。

为了进行比较,如果要在一个部分中包含所有行,则需要按以下步骤更改代码:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return cellArray.count + 1
}

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

        return cell
    } else {
        let cell2 = tableView.dequeueReusableCell(withIdentifier: "CustomTableViewCell") as! CustomTableViewCell

        cell2.cellImage.image = UIImage(named: cellArray[indexPath.row - 1])

        return cell2
    }
}