键盘显示时使用约束重新定位UITableView

时间:2013-07-09 14:43:09

标签: iphone uitableview animation constraints autolayout

似乎陷入了采用自动布局约束的状态。

'简单',我有一个视图,其中有一个容器视图(与主视图大小相同),另外还有一个UITableView,根据图像。enter image description here

当在表格中选择一个单元格时,我会显示键盘并将容器视图的下限约束移动到键盘的高度。 (下限通过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];
    }];
}

(五秒动画是这样我可以看到会发生什么!)

这很难解释,但是如果在键盘显示时表格视图向上滚动到最后一行,然后键盘被解除,则表格视图“向上跳跃”,下面的行几乎消失在导航栏下方。整个东西轻轻地向下滚动到位。这就好像tableview变成了全尺寸,但当然是在屏幕外,然后它会动画下来以使视图适合正确的位置。

我希望我已经充分描述了这一点。描述动画并不容易,但在弹簧和支柱下,我可以将桌子平滑地设置回原始大小和位置。以正常的动画速度完成,这个问题导致闪烁“只是”可以接受,但如果有人可以提供帮助我宁愿解决这个问题吗?我把头发拉出来了!

由于

1 个答案:

答案 0 :(得分:0)

您可以使用免费的Sensible TableView框架自动处理所有大小调整。每天为我节省大量时间。