UITableViewCells动画的速度与折叠tableHeaderView的速率不同

时间:2016-11-07 23:04:30

标签: ios uitableview animation autolayout

我正在尝试排除动态崩溃的tableView标题(粉红色)。随着tableViewHeader高度缩小,表视图单元格应该以其tableView(橙色)的顶部向上拉。开始和结束状态是正确的,但不知何故,表格视图单元格以不同的速率进行动画制作。这里显然有些错误,我似乎无法确定它是什么。

这似乎与我使用自我调整表格视图单元格和tableView.rowHeight = UITableViewAutomaticDimension这一事实有关。如果我使用固定高度的电池,一切都很好。

开始状态:

enter image description here

中间状态(注释单元格已在标题下滑动):

enter image description here

最终状态(布局的最终​​状态是正确的): enter image description here

以下是动画崩溃的代码。

 func collapseHeader() {
    UIView.animate(withDuration: 0.25, delay: 0, options: .curveEaseIn, animations: {
        self.tableView.beginUpdates()
        if let header = self.tableView.tableHeaderView as? TopicTableHeaderView {
            header.setHeaderState(state: .collapsed)
        }

        self.sizeHeaderToFit()
        self.view.layoutIfNeeded()
        self.tableView.endUpdates()
    }) { (bool) in
        print("collapse completed")
    }
}

 func sizeHeaderToFit() {

    if let headerView = tableView.tableHeaderView {
        let height = headerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height
        var frame = headerView.frame
        frame.size.height = height

        if headerView.frame.height != height {
            headerView.frame = frame
            tableView.tableHeaderView = headerView
            headerView.setNeedsLayout()
            headerView.layoutIfNeeded()
        }
    }
}

1 个答案:

答案 0 :(得分:0)

问题就在于我打电话给self.tableView.beginUpdates()的地方。我把它移到self.tableView.endUpdates()正上方的那一行,这解决了问题。