作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
您好,我尝试使用 UITableView 进行展开/折叠,但我的标题有问题。我已经尝试了所有教程但不起作用。这是我的示例代码:
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) } }
最佳答案
由于您使用的是按钮,因此它不会自动展开。
改用标签并设置其numberOfLines = 0
。
稍后在其上添加按钮。
还实现 TableView 部分委托(delegate)/数据源方法:
heightForHeaderInSection return 50 //minimum height
estimateHeightForHeaderSection return UITableView.automaticDimension // automatic height
关于swift - 如何在 UITableView 中制作自动高度标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57994049/
我是一名优秀的程序员,十分优秀!