iOS11中的棘手的tableview部分 - UITableViewAutomaticDimension问题

时间:2017-10-26 03:27:27

标签: ios swift uitableview ios11

我有一个带可折叠部分的tableView。在iOS 10或更早版本中,它完美运行。在iOS 11中,tableView部分在其他部分的中间创建浮动节标题和重复节标题,如下所示:

enter image description here

我一直在研究这个问题,并在其他地方进行了报道并讨论了here

这是我的tableView代码:

class CollapsibleTableViewController: UITableViewController {

    var sections = sectionsData

    override func viewDidLoad() {
        super.viewDidLoad()
        let tableView = UITableView.init(frame: CGRect.zero, style: .grouped)


          // Auto resizing the height of the cell
        tableView.estimatedRowHeight = 44.0
        tableView.rowHeight = UITableViewAutomaticDimension

        self.title = "Education"
                for index in 0 ..< sections.count {
                        sections[index].collapsed = true
                }
    }
}
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 44.0
}

override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return 1.0
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension   //making this a fixed value fixes the drawing bug but doesn't let the cells autosize
}

在我上面发布的另一个相关问题中,回复者建议如下预先设定估计的高度:

self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;

这修复了重复部分,但缩小了我的tableView单元格,因此标签字段不再可见,并且单元格不会自动调整大小以显示其中的所有数据。

据报道,iOS 11通过使用估计值来改变tableView高度的工作方式。

我也尝试过对所有字段使用估算值,如下所示:

tableView.rowHeight = UITableViewAutomaticDimension
tableView.sectionHeaderHeight = UITableViewAutomaticDimension          
tableView.sectionFooterHeight = UITableViewAutomaticDimension

似乎没有什么能够允许正确的单元自动调整并防止单元格与浮动节头重复。

有关如何解决这个问题的想法吗?

1 个答案:

答案 0 :(得分:3)

viewWillAppear()中的

写下你的tableViews初始值,而不是按如下方式提供UItableViewAutomaticDimension:

tableView.estimatedRowHeight = 75 tableView.rowHeight = UITableViewAutomaticDimension

根据需要冲洗并重复页眉,页脚等