在没有UITableViewCells动画的情况下在UITableView上设置动画layoutIfNeeded
我有一个UITableView,它是我的视图控制器的子视图。 它位于屏幕的下半部分,可以使用手势识别器向上滚动。 当手势完成时,我调用一个UIView动画块,通过更改其顶部布局约束来完成UITableView的动画效果(请参见下面的示例代码)。
动画本身工作正常,但我注意到了UITableViewCell子视图展示的一个奇怪的副作用(查看视频 - 注意表视图最底部单元格的反弹),看起来是由于layoutIfNeeded动画调用。
有没有办法将layoutIfNeeded调用隔离到表视图而不是子视图?
码:
- (void) handlePanRecognizer:(UIPanGestureRecognizer*)recognizer {
if (recognizer.state == UIGestureRecognizerStateEnded) {
self.topLayoutConstraint.constant = 0.0f;
//Animate
[UIView animateWithDuration:kAnimationDuration
delay:0.0F
usingSpringWithDamping:kAnimationBounce
initialSpringVelocity:kAnimationBounce
options:UIViewAnimationOptionCurveEaseInOut
animations:^{
[self layoutIfNeeded];
} completion:^(BOOL finished) {
}];
}
}
视频:
这个问题最终与自动布局约束有关。
我已经为我的表格视图设置了一个底部约束,所以它的初始化高度比它的全屏高度要小得多。 动画顶部布局约束时,它会将表视图拉伸到正确的大小,但自动布局奇怪地插入子视图约束(例如我的表视图单元格contentView中的那些约束)。
解决方案是从表视图中移除底部布局约束,并改为给视图一个相同的高度约束。
链接地址: http://www.djcxy.com/p/74229.html上一篇: Animating layoutIfNeeded on UITableView without animating UITableViewCells
下一篇: 45 to +45 angle)?