IOS Swift:设置TableviewCell更改的动画无法正常工作

IOS Swift:设置TableviewCell更改的动画无法正常工作,ios,swift,animation,tableview,cell,Ios,Swift,Animation,Tableview,Cell,我在更新TableViews单元格时有一种非常奇怪的行为 最简单的描述方式是视频: 在这里你可以看到,当我第一次尝试扩展(或折叠)视图时,它做了一些事情,但不是真的。我想展示的视图不在那里,但它会闪烁 这是我的密码: class StylingTableViewController: UITableViewController { //MARK: properties var articles = [Article]() override func viewDidLoad() {

我在更新TableViews单元格时有一种非常奇怪的行为

最简单的描述方式是视频:

在这里你可以看到,当我第一次尝试扩展(或折叠)视图时,它做了一些事情,但不是真的。我想展示的视图不在那里,但它会闪烁

这是我的密码:

class StylingTableViewController: UITableViewController {

//MARK: properties
var articles = [Article]()

override func viewDidLoad() {
    super.viewDidLoad()

    articles.append(contentsOf: [Article(id: "Artikel 1"), Article(id: "Artikel 2")])

    //Let table auto layout in height
    tableView.rowHeight = UITableViewAutomaticDimension
    tableView.estimatedRowHeight = 100

    // Use the edit button item provided by the table view controller.
    navigationItem.rightBarButtonItem = editButtonItem
}

// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
    return 1
}

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

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    // Table view cells are reused and should be dequeued using a cell identifier.
    let cellIdentifier = "ArticleDetailCell"

    guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? StylingDetailTableViewCell  else {
        fatalError("The dequeued cell is not an instance of StylingDetailTableViewCell.")
    }

    let article = articles[indexPath.row]
    cell.articleName.text = article.id

    //Scrollview
    let width:CGFloat = 90;
    var xPos:CGFloat = 0;
    var scrollViewContentSize:CGFloat=0;
    for _ in 0...10{
        let myView:CFPictureView = CFPictureView()
        myView.frame.size.width = 80
        myView.frame.size.height = 120
        myView.frame.origin.x = CGFloat(xPos)
        xPos += width
        cell.pictures_scrollView.addSubview(myView)
        scrollViewContentSize += width
        cell.pictures_scrollView.contentSize = CGSize(width: scrollViewContentSize, height: 120)
    }

    return cell
}

// Override to support editing the table view.
override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {
        // Delete the row from the data source
        articles.remove(at: indexPath.row)
        tableView.deleteRows(at: [indexPath], with: .fade)
    } else if editingStyle == .insert {
        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
    }
}

//MARK: Actions
@IBAction func favButtonPressed(_ sender: UIButton) {
    sender.isSelected = !sender.isSelected
}
@IBAction func expandCell(_ sender: UIButton) {

    if let cell = sender.superview?.superview?.superview?.superview?.superview as? StylingDetailTableViewCell {
        cell.fieldDescriptorStackView.isHidden = false;
        cell.articleBarcode.isHidden = false;
        cell.articleCustomerNumber.isHidden = false;
        cell.articleStyle.isHidden = false;
        cell.expandCellButton.isHidden = true;
        cell.collapseCellButton.isHidden = false;
        cell.pictures_order.isHidden = false;
        cell.pictures_amount.isHidden = false;
        cell.pictures_scrollView.isHidden = false;
        cell.pictures_title.isHidden = false;

        let indexPath = tableView.indexPath(for: cell)
        self.tableView.reloadRows(at: [indexPath!], with: UITableViewRowAnimation.automatic)
        (self.parent as? StylingViewController)?.topStackView.isHidden = true;
    }

}
@IBAction func collapseCell(_ sender: UIButton) {

    if let cell = sender.superview?.superview?.superview as? StylingDetailTableViewCell {
        cell.fieldDescriptorStackView.isHidden = true;
        cell.articleBarcode.isHidden = true;
        cell.articleCustomerNumber.isHidden = true;
        cell.articleStyle.isHidden = true;
        cell.expandCellButton.isHidden = false;
        cell.collapseCellButton.isHidden = true;
        cell.pictures_order.isHidden = true;
        cell.pictures_amount.isHidden = true;
        cell.pictures_scrollView.isHidden = true;
        cell.pictures_title.isHidden = true;

        let indexPath = tableView.indexPath(for: cell)
        self.tableView.reloadRows(at: [indexPath!], with: UITableViewRowAnimation.automatic)
        (self.parent as? StylingViewController)?.topStackView.isHidden = false;
    }
}
func undoAction() {
    print("undo")

}
}

tableView.reloadRows似乎有问题。
感谢您的帮助

可能是问题所在,因为应用程序在第一次运行时仍然不知道单元的估计高度。 可以通过在viewDidLoad上添加以下内容进行修复:

 tableView.estimatedRowHeight = 60
 tableView.rowHeight = UITableViewAutomaticDimension

谢谢你的回复,但是我的viewDidLoad()中已经有了tableView.rowHeight=UITableViewAutomaticDimension和tableView.estimatedRowHeight=100。你能共享你的类文件吗?我添加了整个类文件