如何同时滑入/退出statusBar和navigationBar?

Ort*_*ntz 4 iphone cocoa-touch statusbar uinavigationcontroller ios

我想使用幻灯片效果同时显示和隐藏statusBar和navigationBar.

这是我尝试的方式:

[[UIApplication sharedApplication] setStatusBarHidden:hide withAnimation:UIStatusBarAnimationSlide];
[self.navigationController setNavigationBarHidden:hide animated:animated];
Run Code Online (Sandbox Code Playgroud)

但是,两个动画的持续时间并不相同.状态栏动画需要更长时间.我发现无法如何指定任何一个动画的持续时间.我错过了一些明显的东西吗

nac*_*o4d 5

ios-lizard的答案几乎就是我想要的,但除非hidden设置正确,否则导航栏会在旋转设备时重新出现.所以这对我有用:

Hidding动画作品/看起来不错YEAH !!

显示动画是可以的,(我希望我可以使用导航栏使状态栏滑动,但至少我们不再看到间隙了.:D)

- (void)toggleFullscreen {

    UINavigationBar *navBar = self.navigationController.navigationBar;
    CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
    float animationDuration;
    if(statusBarFrame.size.height > 20) { // in-call
        animationDuration = 0.5;
    } else { // normal status bar 
        animationDuration = 0.6;
    }

    _fullscreen = !_fullscreen;
    if (_fullscreen) { 
        // Change to fullscreen mode
        // Hide status bar and navigation bar
        [[UIApplication sharedApplication] setStatusBarHidden:YES
                                                withAnimation:UIStatusBarAnimationSlide];
        [UIView animateWithDuration:animationDuration animations:^{
            navBar.frame = CGRectMake(navBar.frame.origin.x,
                                  -navBar.frame.size.height,
                                  navBar.frame.size.width,
                                  navBar.frame.size.height);
        } completion:^(BOOL finished) {
            [self.navigationController setNavigationBarHidden:YES animated:NO];
        }];

    } else {
        // Change to regular mode
        // Show status bar and navigation bar
        [[UIApplication sharedApplication] setStatusBarHidden:NO
                                                withAnimation:UIStatusBarAnimationSlide];
        [UIView animateWithDuration:animationDuration animations:^{
             navBar.frame = CGRectMake(navBar.frame.origin.x,
                                       statusBarFrame.size.height,
                                       navBar.frame.size.width,
                                       navBar.frame.size.height);
        } completion:^(BOOL finished) {
            [self.navigationController setNavigationBarHidden:NO animated:NO];
        }];

    }

}
Run Code Online (Sandbox Code Playgroud)