0

这段代码每次运行时都会为我的视图设置动画,但第一次除外。当键盘显示或隐藏时,一个 UIView 被重新定位:

[UIView
animateWithDuration:0.26
animations:^{
    [self setupActiveOverlayViewFrame];
}completion:nil];

-(void)setupActiveOverlayViewFrame {
    float optimalOverlayHeight = [self.activePanel optimalHeight];

    float realOverlayHeight = MIN(optimalOverlayHeight, self.displayView.frame.size.height);

    if (self.activePanel.frame.size.height != realOverlayHeight) {
        self.activePanel.frame = CGRectMake(self.activePanel.frame.origin.x, 0, self.activePanel.frame.size.width, realOverlayHeight);
    }

    self.activePanel.center = [self correctCenterForOverlay];
}

我发布的方法只是为了表明它所做的只是重新调整大小和重新定位它。

第一次运行此代码时,它没有动画。它只是跳入位置。之后的每次,它都会正确地动画。

4

2 回答 2

0

在您的视图完全设置之前,可能会调用“键盘确实显示”通知,例如,如果您已将视图控制器推到导航控制器上并立即将文本视图焦点放在viewDidLoad

您可以跟踪键盘何时启动或关闭以及何时viewDidAppear被调用,检查键盘是否启动并运行它。或者您可以推迟将焦点放在文本视图/字段上,直到viewDidAppear:被调用。

于 2013-09-01T17:19:36.013 回答
0

我遇到了同样的问题。我想建议您在制作动画之前(!)检查面板中心,以了解它在第一次运行时的正确位置。如果不是。只需设置正确的位置。也尝试下一个代码

[self setupActiveOverlayViewFrame];
[UIView animateWithDuration:0.26
                 animations:^{
           [self.view layoutIfNeeded];
}completion:nil];

PS 如果您使用自动布局,请使用上面的代码更好地使用约束来移动您的视图。

于 2015-02-22T19:38:04.717 回答