在iOS表视图的不同部分使用不同的单元格类型

时间:2017-08-02 10:00:15

标签: ios uitableview swift3

我正在测试如何在UITableView中为不同的部分使用不同的单元格类型。我为此创建了一个项目。故事板看起来像这样: enter image description here

正如你所看到的,我已经插入了两个原型细胞,外观略有不同。这是我的视图控制器:

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
    @IBOutlet var tableView: UITableView!
    var firstSection = "first title"
    var secondSection = ["second title", "third title"]

    override func viewDidLoad() {
        super.viewDidLoad()
        self.tableView.dataSource = self
        self.tableView.delegate = self
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

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

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

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if indexPath.section == 0 {
            let cell = self.tableView.dequeueReusableCell(withIdentifier: "first_cell", for: indexPath) as! FirstCell
            cell.title.text = self.firstSection
            return cell
        }
        else {
            let cell = self.tableView.dequeueReusableCell(withIdentifier: "second_cell", for: indexPath) as! OtherCell
            cell.title.text = self.secondSection[indexPath.row]
            return cell
        }
    }

    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        if section == 0 {
            return "Section 1"
        }
        else {
            return "Section 2"
        }
    }
}

我的两种表格视图单元格的定义:

class FirstCell: UITableViewCell {
    @IBOutlet var title: UILabel!
}

class OtherCell: UITableViewCell {
    @IBOutlet var title: UILabel!
}

我确保在故事板中指定原型单元的类名,并设置它们的重用标识符。但是,已编译的应用程序显示此意外行为: enter image description here

首先,不显示单元格。第二,在第二节标题下,有一些灰色区域有一些x插入,其起源我不知道。我怎么能解决这个问题?提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可能需要设置细胞的高度。

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
    }

    func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
    }