iPhone : HOWTO move status bar with pan gesture

2019-02-02 03:09发布

问题:

Like Instagram - EXPLORE Tab, when I scroll the content, the status bar moves as well.

Always called FullScreenScroll, like here, when the user scrolls the tableView, the NavigationBar & TabBar are scrolled to show or hide at the same time.

My problem is, not only NavigationBar & TabBar, I also want to make the StatusBar follow the finger move.

Finally, it is really fullscreen.

回答1:

This is the best solution you can find to get status bar window

UIWindow *statusBarWindow = (UIWindow *)[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"];

Then change the frame



回答2:

I don't know why downvote my question without comments or reasons. Though, I found a solution to achieve moving status bar.

Thanks to this question and answer which I upvoted for, I can change the statusBar's frame while scrolling like below:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    NSArray *windows = [[UIApplication sharedApplication] FEX_windows];
    for (UIWindow *window in windows) {
        if ([window isKindOfClass:NSClassFromString(@"UIStatusBarWindow")]) {
            CGRect frame = window.frame;
            frame.origin.y -= 5;
            window.frame = frame;
        }
    }
}


回答3:

You can set the status bar hidden with an animation by calling:

[[UIApplication sharedApplication] setStatusBarHidden:BOOL withAnimation:UIStatusBarAnimation]

If you'd like to move the status bar pixel by pixel, you'll need to take a more creative approach. I believe that the way Instagram does this is by taking an image representation of the status bar (like a screenshot of the status bar), hiding the actual status bar, and then moving the image representation up and down as the user scrolls.



回答4:

And swift:

if let statusBarWindow:UIWindow = UIApplication.shared.value(forKey: "statusBarWindow") as? UIWindow {
   statusBarWindow.frame.origin.y = -5
}