【问题标题】:Animating tableviewcell after I deactivate a constraint of its subview在我停用其子视图的约束后动画 tableviewcell
【发布时间】:2017-12-12 22:58:28
【问题描述】:
我有一个单元格,它有一个固定大小为 n 的 textview。当我按下按钮时,我会停用该高度约束,并且由于为动态单元格大小设置了 tableview,单元格会调整大小。唯一困扰我的是我似乎无法让它动画大小的变化。它相当“二进制”,收缩或扩展。我已经尝试在 indexpath、beginupdates-endupdates 处重新加载行,但我碰壁了。我很感激任何建议。谢谢
【问题讨论】:
标签:
swift
autolayout
tableview
constraints
cell
【解决方案1】:
当您想要动画约束更改时,您通常可以使用约束更改后跟
UIView.animate(withDuration:1){self.view.layoutIfNeeded() }
如果您尝试为实际的约束更改设置动画,它将不起作用。
【解决方案2】:
您可以将layoutIfNeeded() 放置在常规的animate(withDuration...) 方法中,但创建Core Animation 事务允许您使用自定义时序(缓动)曲线。
CATransaction.begin()
someViewConstraintDefault.isActive = false
someViewConstraintNew.isActive = true
CATransaction.setAnimationTimingFunction(CAMediaTimingFunction(controlPoints: 0.25, 1, 0.25, 1))
UIView.animate(withDuration: 0.5, animations: { [weak self] in
self?.view.layoutIfNeeded()
})
CATransaction.commit()
这是构建自定义时序曲线的好工具:http://netcetera.org/camtf-playground.html