【问题标题】:Section header cannot be hidden in UITableView with UITableViewAutomaticDimension不能使用 UITableViewAutomaticDimension 在 UITableView 中隐藏节标题
【发布时间】:2016-04-11 09:06:02
【问题描述】:

我有一个带有部分标题的 UITableView。整个 tableview 设置了 UITableViewAutomaticDimension,用于单元格和标题:

class ViewController: UIViewController {

    @IBOutlet weak var tableView: UITableView!
    @IBOutlet var sectionHeader: MyTableViewHeaderFooterView!

    let data = [
        "Lorem ipsum dolor sit amet",
        "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation",
        "Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
    ]

    override func viewDidLoad() {
        super.viewDidLoad()

        self.tableView.rowHeight = UITableViewAutomaticDimension
        self.tableView.estimatedRowHeight = 44.0

        self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension
        self.tableView.estimatedSectionHeaderHeight = 44.0
    }

    // MARK: - Table View

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

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

    func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
        if section == 0 {
            self.sectionHeader.label.text = "Section \(section)"
            return self.sectionHeader
        } else {
            return nil
        }
    }

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

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! MyTableViewCell
        cell.label.text = data[indexPath.row]
        return cell
    }


}

问题是我想隐藏一些节标题。第二部分标题应该被隐藏,因为我返回 nil 而不是视图,但是空间仍然保留。为什么?

Github 上的 Xcode 项目: https://github.com/bvankuik/SectionHeaderAlwaysVisible

【问题讨论】:

    标签: ios uitableview uitableviewsectionheader


    【解决方案1】:

    Apple 关于UITableViewAutomaticDimension 的文档说:

    从 tableView:heightForHeaderInSection: 或返回这个值 tableView:heightForFooterInSection: 产生适合的高度 从 tableView:titleForHeaderInSection: 或返回的值 tableView:titleForFooterInSection: 如果标题不为零

    恐怕您需要更改计算标题高度的方式,如下所示:

    func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
        if section == 1 {
            return 0
        } else {
            return UITableViewAutomaticDimension
        }
    }
    

    【讨论】:

    • 谢谢!这适用于我的最小示例项目,但不适用于我的实际工作项目......现在找出原因:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 2014-09-30
    • 1970-01-01
    相关资源
    最近更新 更多