2014-10-01 101 views
0

我有一个UITableView是我的视图控制器的子视图。它位于屏幕的下半部分,可以使用手势识别器向上滚动。当手势完成时,我调用一个UIView动画块,通过更改其顶部布局约束来完成UITableView的动画效果(请参见下面的示例代码)。动画layoutIfNeeded UITableView没有动画UITableViewCells

动画本身工作正常,但我注意到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) { 
        }]; 

    } 
} 

视频: enter image description here

回答

0

问题最后不得不与自动布局约束的事情。

我已经为我的表视图设置了一个底部约束,所以它的初始化高度比它的全屏高度要小得多。动画顶部布局约束时,它会将表视图拉伸到正确的大小,但自动布局奇怪地插入子视图约束(例如我的表视图单元格contentView中的那些约束)。

解决方法是从表格视图中移除底部布局约束,并改为给视图等高度约束。