我正在尝试使用
+ transitionWithView:duration:options:animations:completion:
设置更改UITableView高度约束的动画。设置选项后,UITableViewCell contentView的子视图UIView也会动画显示。效果如下。正如您所看到的那样,窗口下方的单元格向上,红点视图的边界将动画化为预定义的约束。如果我没有设置动画选项,它就不会是这样的。但是当我改变UITableView高度时我需要动画。那么如何保持表视图高度动画并禁用表视图单元格contentView的子视图动画?代码如下。红点视图是具有红色背景颜色的UIView。有没有办法禁用UITableViewCell contentView的子视图动画?
- (void)changeTableViewHeight {
self.tableViewTopVerticalSpaceConstraint.constant = 0;
[self.tableView setNeedsUpdateConstraints];
[self.view setNeedsUpdateConstraints];
[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
[self.view layoutIfNeeded];
} completion:^(BOOL finished) {
self.topViewHeightConstraint.constant = 50;
[self.topView setNeedsUpdateConstraints];
}];
}
答案 0 :(得分:0)
//1. All constraints change must be done
self.hightConstraint.constant = 200;
self.anotherConstraint.constant = 34;
...
...
// 2. Indimate to iOS that this view need update constraints.
// Hey iOS I have modified few constraints. beware of it to layout that changes.
[self.view setNeedsUpdateConstraints];
// 3. I'm done, relayout the view with animation,
If I really changed any constraints to view.
[UIView animateWithDuration:1.5 animations:^{
[self.view layoutIfNeeded];
}];
希望有人能节省时间
答案 1 :(得分:0)
有一个类似的问题,我解决了禁用动画的视图层我不想动画。在您的情况下...为您的awakeFromNib
子类实现UITableViewCell
方法并在那里禁用动画。在你的情况下像... ...
override func awakeFromNib() {
super.awakeFromNib()
redCircleView.layer.removeAllAnimations()
}
事情是UIView.animateWithDuration
为视图的图层设置动画,对于在此动画期间或因此动画创建的新表视图单元格和其他视图,所有更改也将被设置为动画。
...编辑......
与此同时,我设法找到了更好的解决方案。在UIView.animateWithDuration
的options参数中,使用UIViewAnimationOptionLayoutSubviews
(或Swift中的.LayoutSubviews
)选项。这将在动画提交时布置子视图。
答案 2 :(得分:-1)
更新代码
- (void)changeTableViewHeight {
self.tableViewTopVerticalSpaceConstraint.constant = 0;
self.topViewHeightConstraint.constant = 50;
[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseIn animations:^{
[self.view layoutIfNeeded];
} completion:^(BOOL finished) {
[self.topView setNeedsUpdateConstraints];
}];
}