UITableViewCell 中带有约束的动画启动不正确

Posted

技术标签:

【中文标题】UITableViewCell 中带有约束的动画启动不正确【英文标题】:Animation with constraints in UITableViewCell launches incorrectly 【发布时间】:2016-01-20 05:13:07 【问题描述】:

我遇到了一个问题,我通过调整自动布局约束来为表格单元格中简单 UIView 的大小设置动画。

当我第一次启动表时,一切都坏了。

如果我重新加载表格,它会很好地工作。

它是一个只有几行代码的单一视图控制器。请下载此demo project 以查看它的实际应用。

这是我在整个 UIViewController 中的代码:

import UIKit

class TableCell: UITableViewCell 
    @IBOutlet weak var constraintRedBarWidth: NSLayoutConstraint!
    @IBOutlet weak var labelTitle: UILabel!
    @IBOutlet weak var viewBarArea: UIView!
    @IBOutlet weak var viewRedBar: UIView!


class ViewController: UIViewController 
    @IBOutlet weak var tableView: UITableView!
    var tableData : [CGFloat] = [1, 0.90, 0.70, 0.80,0.50] //percentages

    override func viewDidLoad() 
        super.viewDidLoad()
    

    @IBAction func btnReloadTable(sender: AnyObject) 
        tableView.reloadData()
    



extension ViewController: UITableViewDelegate, UITableViewDataSource 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        return tableData.count
    

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
        let cell = tableView.dequeueReusableCellWithIdentifier("TableCell") as! TableCell
        cell.labelTitle.text = "Item \(indexPath.row + 1)"
        cell.constraintRedBarWidth.constant = 1
        cell.layoutIfNeeded()
        cell.constraintRedBarWidth.constant = cell.viewBarArea.frame.width * tableData[indexPath.row]
        UIView.animateWithDuration(0.5, animations: 
            cell.layoutIfNeeded()
        )
        return cell
    


viewBarArea 只是红色视图的父视图,简单地表示栏的可能最大尺寸。

【问题讨论】:

问题是cell.viewBarArea.frame.width 给出了单元格的原始宽度......就像你使用 wAnyhAny 并且你的单元格宽度是 580,而不是第一次给出 580 的宽度......你必须使用 @987654328 @ 以根据设备获取更新的宽度 所以在 viewWIllLayoutSubviews 中,我应该循环遍历可见的表格单元格并应用动画吗?这可能有效,但似乎有点密集。我去看看 @El Captain,我刚刚意识到这是行不通的,因为动画会在滚动或执行其他任何操作时不断重复。 【参考方案1】:

使用这一行 cellForRowAtIndexPath 就是这样

let cell = tableView.dequeueReusableCellWithIdentifier("TableCell", forIndexPath: indexPath) as! TableCell

【讨论】:

这是常见的错误。不用担心。阅读此***.com/questions/25826383/… 或developer.apple.com/videos/play/wwdc2012-200 天哪,这正是我所需要的!你摇滚!

以上是关于UITableViewCell 中带有约束的动画启动不正确的主要内容,如果未能解决你的问题,请参考以下文章

在 xib 中带有可选 UIImageView 的自定义 UITableViewCell

动画 UITableViewCell 高度

UITableViewCell 块中带有手势识别器的 UILabel didSelectRowAtIndexPath

Swift中带有按钮的UITableViewCell [重复]

UITableViewCell 中带有 UIImages 的 UIButton - 重叠等

UITableViewCell 中带有多行标签的 UIStackView 高度不正确