1

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

'简单',我有一个视图,其中有一个容器视图(与主视图大小相同),其中还有一个 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];
    }];
}

(五秒钟的动画让我可以看到发生了什么!)

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

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

谢谢

4

1 回答 1

0

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

于 2013-07-09T15:07:33.000 回答