Transitioning between transparent navigation bar to translucent

后端 未结 2 1089
没有蜡笔的小新
没有蜡笔的小新 2021-01-29 23:17

In Apple\'s recently released Remote app I noticed the way in which the navigation bar behaves is unique and I haven\'t been able reproduce it. When popping the Now Playing view

2条回答
  •  夕颜
    夕颜 (楼主)
    2021-01-29 23:52

    I just downloaded the application to make sure. Two different navigation bars are used. You can see this by using the interactive pop gesture. Notice how the navigation bar on the bottom view controller slides in and out. During normal push and pop transitions, the navigation items just fade in and out on the existing bar, while the bar is stationary. This is what happens up until the point where the now playing view controller is pushed.

    If you look quickly, during the now playing view controller animation, you can see the bottom navigation bar disappear.

    From my experience with UIKit behavior and what I see in the app, here is what I think happens:

    album_vc = the bottom, list view controller nowplaying_vc = the top view controller

    • On nowplaying_vc's viewWillAppear:

      • Set the navigation bar to hidden using [self.navigationController setNavigationBarHidden:YES animated:YES];. Since this is in animation block, this will make the navigation bar slide out during the push animation.
      • Set [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent; Pretty sure about this, because notice there is no animation in the transition of the status bar styles. It just becomes white.
    • On nowplaying_vc's viewWillDisappear:

      • Set the navigation bar to shown using [self.navigationController setNavigationBarHidden:NO animated:YES];. Since this is in animation block, this will make the navigation bar slide in during the pop animation.
      • Set [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault; Again, notice how during interactive pop gesture, the status bar just changes with no animation.

    To achieve the transparent look of the navigation bar of nowplaying_vc, you can use an empty image ([UIImage alloc]) with setBackgroundImage:forBarPosition:barMetrics:.

    Since the application does not rotate, we can't be sure if the navigation bar on nowplaying_vc is part of another navigation controller or just a navigation bar on the top with a position of UIBarPositionTopAttached. For all we know, there isn't even a navigation bar there but just a back chevron image view (back bar button is comprised of an image view and a button).

    I think the status bar style is changed in viewWillAppear: and viewWillDisappear: due to the unnatural feel there is during interactive pop gesture. I would recommend using an animated transition, or even better, use the new view controller-based status bar style, which the system animates transitions by itself.


    Update for modern API:

    You should use the animateAlongsideTransition:completion: or animateAlongsideTransitionInView:animation:completion: API, rather than relying on the implicit animations of viewWillAppear: and viewWillDisappear:.

提交回复
热议问题