在没有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)?