似乎进入了采用自动布局约束的状态。
'简单',我有一个视图,其中有一个容器视图(与主视图大小相同),其中还有一个 UITableView,根据图像。
当在表格中选择一个单元格时,我会显示键盘并将容器视图的下约束向上移动键盘的高度。(下约束通过 IBOutlet 连接)。桌子在受到约束时随之移动。
-(void)scrollInputUp:(NSInteger)height duration:(NSTimeInterval)animationDuration
{
self.keyboardHeight.constant = -height;
[self.view setNeedsUpdateConstraints];
[UIView animateWithDuration:animationDuration animations:^{
[self.view layoutIfNeeded];
}];
NSIndexPath *currentIndexPath = myTable.indexPathForSelectedRow;
[myTable scrollToRowAtIndexPath:currentIndexPath atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
}
我还将所选行滚动到位。这运作良好,似乎是一种“标准”的方式来做到这一点的约束。self.keyboardHeight 是我的下限约束,所有其他约束都是固定的。然后我有我的缩小尺寸的桌子。
当我按以下方式关闭键盘时,我的问题出现了......
-(void)scrollInputDown:(NSTimeInterval)animationDuration
{
[self.view setNeedsUpdateConstraints];
self.keyboardHeight.constant = 0;
[UIView animateWithDuration:5 animations:^{
[self.view layoutIfNeeded];
}];
}
(五秒钟的动画让我可以看到发生了什么!)
这很难解释,但是如果在显示键盘时表格视图向上滚动到最后一行,然后关闭键盘,则表格视图会“向上跳跃”并且下方的行几乎会在导航栏下消失。整个东西轻轻地向下滚动到位。就好像表格视图变成全尺寸但当然不在屏幕上,然后它会向下动画以将视图放置在正确的位置。
我希望我已经充分描述了这一点。描述动画并不容易,但在弹簧和支柱下,我可以顺利地将桌子动画恢复到原始大小和位置。以正常的动画速度完成,这个问题会导致“只是”可以接受的闪烁,但如果有人可以提供帮助,我宁愿解决这个问题?我要拔头发了!
谢谢