我有一个UITableviewCell
子类,其中包含一个UIButton
,它被放置在屏幕外(右侧),并带有一个Autolayout水平空间约束,它的超级视图为-312。
现在,我想在选择单元格时将此约束设置为-8的值。
我在单元格类中为此约束创建了一个插座,我尝试使用以下代码为此约束设置动画:
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let cell = tableView.dequeueReusableCellWithIdentifier("VariationsTableViewCell", forIndexPath: indexPath) as! VariationsCell
UIView.animateWithDuration(1.0, delay: 0.0, options: .CurveEaseOut, animations: {
cell.buttonRightSideConstraint.constant = -8
}, completion: { finished in
println("Button revealed!")
})
}
遗憾的是,这不起作用。如果我用.reloadData()
重新加载tableview,则显示按钮,告诉我Autolayout约束得到更新,但动画不会被触发。
答案 0 :(得分:1)
使用自动布局制作动画时,必须使用layoutIfNeeded
为约束中的更改设置动画。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("VariationsTableViewCell", forIndexPath: indexPath) as! VariationsCell
UIView.animateWithDuration(1.0, delay: 0.0, options: .CurveEaseOut) {
cell.layoutIfNeeded()
}
return cell
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let cell = tableView.dequeueReusableCellWithIdentifier("VariationsTableViewCell", forIndexPath: indexPath) as! VariationsCell
cell.buttonRightSideConstraint.constant = -8
tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .None)
}