放置UITableView的beginUpdates()& amp;时,如何获得正确的单元格高度变化动画行为?动画块内的endUpdates()

时间:2017-04-27 16:50:40

标签: ios uitableview

所以我想更改UITableView的beginUpdates()&的默认动画持续时间。 endUpdates(),我认为是0.3秒。

我尝试将它们放在UIView动画块中,然后我得到了突然的动画。

要了解我在说什么,请创建一个新的iOS"单一视图应用程序"项目,并使用以下代码替换ViewController.swift

class ViewController: UIViewController {

    var tableView = UITableView()
    var isExpanded = false

    override func viewDidLoad() {
        super.viewDidLoad()
        view.addSubview(tableView)
        tableView.frame = view.bounds
        tableView.dataSource = self
        tableView.delegate  = self

        let changeHeightButton = UIBarButtonItem(title: "Change Height", style: .plain, target: self, action: #selector(changeHeight))
        navigationItem.rightBarButtonItem = changeHeightButton
    }

    func changeHeight() {
        isExpanded = !isExpanded
        UIView.animate(withDuration: 0.5, animations: {
            self.tableView.beginUpdates()
            self.tableView.endUpdates()
        }, completion: nil)
    }
}

extension ViewController: UITableViewDataSource, UITableViewDelegate {
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell") ?? UITableViewCell(style: .default, reuseIdentifier: "cell")
        cell.textLabel?.text = "Section \(indexPath.section), Row \(indexPath.row)"
        return cell
    }
    func numberOfSections(in tableView: UITableView) -> Int{
        return 4
    }
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 3
    }
    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return "Section: \(String(section))"
    }
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        if isExpanded && indexPath == IndexPath(row: 0, section: 0) { return 300 }
        else { return 44 }
    }
}

0 个答案:

没有答案