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 に答える