Hello i try to make expand/collapse using UITableView but i have problem with Header. I have try all tutorial but not working. This is my sample code:
import UIKit import SafariServices class AboutViewController: UIViewController { @IBOutlet weak var tblView: UITableView! var data = [ DataModal(headerName: "Apa itu Brevir?", subType: ["Brevir adalah bla..bla"], isExpandable: false), DataModal(headerName: "Apa isi Brevir?", subType: ["Garis besarnya adalah bla..bla..blaa...bla..bla..blaa...bla..bla..blaa...bla..bla..blaa"], isExpandable: false), DataModal(headerName: "Mengapa 7x Sehari?", subType: ["Tujuh Kali dalam bla..bla"], isExpandable: false), DataModal(headerName: "Ibadat apa saja yang termaksud dalam 7x sehari tersebut?", subType: ["a. Ibadat Pembukaan", "b. Ibadat Pembukaan", "c. Ibadat Pembukaan", "d. Ibadat Pembukaan", "e. Ibadat Pembukaan", "f. Ibadat Pembukaan", "g. Ibadat Pembukaan"], isExpandable: false)] override func viewDidLoad() { super.viewDidLoad() tblView.tableFooterView = UIView() } } extension AboutViewController: UITableViewDataSource, UITableViewDelegate { func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let headerView = HeaderView(frame: CGRect(x: 10, y: 10, width: tblView.frame.size.width - 20, height: 40)) headerView.delegate = self headerView.secIndex = section headerView.btn.setTitle(data[section].headerName, for: .normal) return headerView } func numberOfSections(in tableView: UITableView) -> Int { return data.count } func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 44 } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if data[section].isExpandable { return data[section].subType.count } else { return Int(UITableView.automaticDimension) } } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) cell.textLabel?.numberOfLines = 0 cell.textLabel?.text = data[indexPath.section].subType[indexPath.row] return cell } override func viewWillAppear(_ animated: Bool) { tblView.estimatedSectionHeaderHeight = 40 tblView.sectionHeaderHeight = UITableView.automaticDimension } } extension AboutViewController: HeaderDelegate { func callHeader(idx: Int) { data[idx].isExpandable = !data[idx].isExpandable tblView.reloadSections([idx], with: .automatic) } }