Why does hiding my status bar completely break my simple animation?

白昼怎懂夜的黑 提交于 2019-12-20 05:51:24

问题


Example project: http://cl.ly/0O2t051o081p

I want to achieve a slide-out sidebar as described in this question where the status bar moves as well. I've got everything working and the sidebar slides, but as soon as I try to hide the status bar with to complete the "illusion" it stops anything from happening at all and the sidebar no longer slides out.

Here's my code:

- (void)viewDidAppear:(BOOL)animated {
    double delayInSeconds = 1.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        [self.PostsView addSubview:[[UIScreen mainScreen] snapshotViewAfterScreenUpdates:NO]];

        hide = YES;
        [self setNeedsStatusBarAppearanceUpdate];

        [UIView animateWithDuration:1.0 animations:^{
            CGRect postsFrame = self.PostsView.frame;
            postsFrame.origin.x = self.MenuView.frame.size.width;

            self.PostsView.frame = postsFrame;
        }];
    });
}

Where my code basically consists of a containing view controller that contains two child view controllers (the main view controller and the sidebar view controller) built in the Storyboard.

I've also tried setting View controller-based status bar appearance in the plist to NO and calling [[UIApplication sharedApplication] setStatusBarHidden] but the exact same result happens where it breaks.

What am I doing wrong?


回答1:


I'm not sure why that line breaks you animation, but it worked properly if I did what you said in your last paragraph, but added a layoutIfNeeded to the view before the animation (I did set View controller-based status bar appearance to NO in the info.plist).

- (void)viewDidAppear:(BOOL)animated {
    double delayInSeconds = 1.0;
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
        [self.PostsView addSubview:[[UIScreen mainScreen] snapshotViewAfterScreenUpdates:NO]];
        [[UIApplication sharedApplication] setStatusBarHidden:YES];
        [self.view layoutIfNeeded];
        hide = YES;
        [UIView animateWithDuration:1.0 animations:^{
            CGRect postsFrame = self.PostsView.frame;
            postsFrame.origin.x = self.MenuView.frame.size.width;

            self.PostsView.frame = postsFrame;
        }];
    });
}

Also it's unnecessary to implement prefersStatusBarHidden.



来源:https://stackoverflow.com/questions/20551749/why-does-hiding-my-status-bar-completely-break-my-simple-animation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!