如何在TableView中软化开始和结束更新

时间:2018-12-11 08:46:33

标签: ios swift tableview

我在TableView中有三个单元格。 它在第一个单元格上有一个按钮,当按下它时,第一个单元格的垂直尺寸会扩大。

在ViewController中:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if indexPath.section == 1 {
        return 0
    }
    else if indexPath.section == 0 {
        return CGFloat(expandedHeight) //700 //500
    }
    else if indexPath.section == 2 {
        return 240
    }
    return 133
} 
//I've modified some of my code, but it works this way.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if indexPath.section == 0 {
        let cell = tableView.dequeueReusableCell(withIdentifier: "one", for: indexPath) as! one

        return cell
    }
    else if indexPath.section == 1 {
        let cell = tableView.dequeueReusableCell(withIdentifier: "two", for: indexPath) as! two

        return cell
    }
    else if indexPath.section == 2 {
        let cell = tableView.dequeueReusableCell(withIdentifier: "thr", for: indexPath) as! thr

        return cell
    }

    return UITableViewCell()
}

func ExpandedButtonClick(_ height: Int)
{
    tableView.beginUpdates()
    expandedHeight = height // 500 700 switch
    tableView.endUpdates()
}

在TableViewCell中(一个):

@IBAction func btnClickExpanded(_ sender: Any)
{
    if let myViewController = parentViewController as? ViewController
    {
        if constraintExpend.constant == 500
        {
            constraintExpend.constant = 700
            myViewController.ExpandedButtonClick(700)
        }
        else
        {
            constraintExpend.constant = 500
            myViewController.ExpandedButtonClick(500)
        }
    }
}

一切正常,但是有问题。

只有我看到的屏幕部分应该动画,但是整个屏幕都在移动。看到这个令人不安。

如果我只想对扩展部分进行动画处理?

我想在固定屏幕的同时进行扩展。

1 个答案:

答案 0 :(得分:0)

我很难找到它,因为问题有点不同。

总而言之,我找到了完美的答案。

@Sujan Simha reloadData() of UITableView with Dynamic cell heights causes jumpy scrolling

在我的问题中,ExpandedButtonClick函数

func ExpandedButtonClick (_ height: Int)
{
    expandedHeight = height
    tableView.beginUpdates ()
    tableView.endUpdates ()
    tableView.layer.removeAllAnimations ()
    tableView.setContentOffset (tableView.contentOffset, animated: false)
}

这很好用!