【问题标题】:Animating layoutIfNeeded on UITableView without animating UITableViewCells在 UITableView 上为 layoutIfNeeded 设置动画而不为 UITableViewCells 设置动画
【发布时间】:2014-10-01 19:12:01
【问题描述】:

我有一个 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) {
                   }];

  }
}

视频:

【问题讨论】:

    标签: ios objective-c uitableview uiview autolayout


    【解决方案1】:

    问题最终与自动布局约束有关。

    我为表格视图设置了底部约束,因此它的初始化高度远小于其全屏高度。在为顶部布局约束设置动画时,它会将表格视图拉伸到正确的大小,但自动布局会奇怪地插入子视图约束(例如我的表格视图单元格 contentView 中的那些)。

    解决方案是从 table view 中移除底部布局约束,而是给它一个与 view 相等的高度约束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多