2013-07-09 171 views
1

似乎进入采用自动布局约束的状态。UITableView在键盘显示时使用约束来重新定位

'简单',我有一个视图,其中包含一个容器视图(与主视图大小相同),以及此图像中的另一个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变成了全尺寸的,但当然是在屏幕外,然后它就会动画下来,以适应正确的位置。

我希望我已经充分描述了。描述动画并不容易,但在弹簧和支柱下方,我可以平滑地将桌面制作回原始大小和位置。在正常的动画速度下完成,这个问题会导致闪烁,这只是'可以接受',但我宁愿修复这个问题,如果任何人都可以帮忙的话?我正在拉我的头发!

谢谢

回答

0

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

+0

谢谢,也许如此。我甚至可以看看它。但我想了解我的问题,所以在寻求帮助。 – Fittoburst