2

このアニメーションを自分の中に入れてviewController、メニューを縮小して下にスライドさせます。

-(void)dismissMenuWithAnimation
{
    CGRect originalFrame = self.view.frame;
    [UIView animateWithDuration:2
                     animations:^{
                         self.view.frame = CGRectMake(originalFrame.origin.x,originalFrame.origin.y+originalFrame.size.height,originalFrame.size.width,10);
                     }
                     completion:^(BOOL finished){
                         [self.view removeFromSuperview];
                         self.view.frame = originalFrame;
                     }];
}

同じ中viewControllerで、私はオーバーライドしていますviewWillLayoutSubviews

-(void)viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];

    CGRect viewBounds = self.view.bounds;
    self.subView1.frame = CGRectMake(self.menuItemMidPosition,viewBounds.size.height-SUBVIEW1_HEIGHT,SUBVIEW1_WIDTH,SUBVIEW1_HEIGHT);

}

このメソッドでフレームが設定されているサブビューがいくつかありviewWillLayoutSubviewsます。フレームがまだ正しくないため、viewDidLoadで設定しません。

問題は、メニューを閉じると、アニメーションブロックが最初に呼び出され、どういうわけかself.view.frameがすぐに高さ10(縮小されたフレーム)に設定されることです。viewWillLayoutSubviewsに達すると、境界の高さは10になります。これにより、他のサブビューが正しく表示されなくなります。

これはかなりばかげているように見えますが、これを解決する方法がわかりません。誰かが助けることができますか?ありがとう。

4

2 に答える 2

0

私自身の解決策は、viewWillLayoutSubviews をまったく使用しないことです。フレームのサイズが正しく変更されるように、自動サイズ変更マスクを使用するだけです。

于 2012-11-02T02:39:37.003 に答える