我有一个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) {
}];
}
}
视频:
答案 0 :(得分:0)
问题最终与自动布局约束有关。
我为表格视图设置了一个底部约束,因此其初始化高度远小于其全屏高度。在为顶部布局约束设置动画时,它会将表格视图拉伸到正确的大小,但是自动布局会奇怪地插入子视图约束(例如我的表视图单元格内容中的那些)。
解决方案是从表视图中删除底部布局约束,而是为视图赋予它相同的高度约束。