在透明导航栏之间过渡到半透明

soo*_*per 27 uinavigationbar uinavigationcontroller ios

在Apple最近发布的Remote应用程序中,我注意到导航栏的行为方式是独特的,我无法重现它.当弹出正在播放视图控制器时,导航栏对于正在播放视图控制器保持透明,并且库视图控制器的导航栏也保持半透明(屏幕截图1).我想弄清楚他们是使用两个导航控制器还是只使用一个.我个人觉得他们只使用一个有两个原因(1)启用了交互式弹出手势; (2)当您按下库视图控制器中的"正在播放"按钮时,就在现在播放屏幕完成"推视控制器"动画之前,导航栏变为透明(屏幕截图2).这是我按下视图控制器时所遇到的行为(将导航栏设置为透明).所以我的问题是:Apple如何呈现两个视图控制器的两个视图控制器的导航栏,就像它们是个体一样(如屏幕截图1),甚至条形按钮,导航标题等...切换时的不透明度为100%(通常在当按下新控制器时,按下/弹出前一个视图控制器的按钮和标题会逐渐消失.我试着玩弄了吧色调颜色viewDidAppear,并viewWillAppear在这两个视图控制器,但无法重现相同的行为,并不能防止褪色栏按钮.

天哪我希望我已经很好地解释了这一点,我只是想着它而感到困惑!

截图1(弹出): 截图1

截图2(推送): 截图2

Leo*_*ica 37

我刚刚下载了应用程序以确保.使用两个不同的导航栏.您可以使用交互式弹出手势来查看此内容.请注意底部视图控制器上的导航栏如何滑入和滑出.在正常的推送和弹出过渡期间,导航项目只会在现有条形上淡入淡出,而条形图则是静止的.这是直到现在正在播放视图控制器的点发生的情况.

如果你看起来很快,在现在播放的视图控制器动画中,你可以看到底部导航栏消失.

根据我对UIKit行为的体验以及我在应用程序中看到的内容,我认为这就是:

album_vc=底部,列表视图控制器 nowplaying_vc=顶视图控制器

  • nowplaying_vc.的viewWillAppear:

    • 使用导航栏将其设置为隐藏[self.navigationController setNavigationBarHidden:YES animated:YES];.由于这是在动画块中,这将使推导动画期间导航栏滑出.
    • 设置非常[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;确定,因为注意状态栏样式的转换中没有动画.它变得白皙.
  • nowplaying_vc.的viewWillDisappear:

    • 将导航栏设置为使用显示[self.navigationController setNavigationBarHidden:NO animated:YES];.由于这是在动画块中,这将使导航栏在弹出动画期间滑入.
    • [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;再次设置,注意在交互式弹出手势期间,状态栏只是在没有动画的情况下更改.

要实现导航栏的透明外观nowplaying_vc,可以使用空图像([UIImage alloc])setBackgroundImage:forBarPosition:barMetrics:.

由于应用程序不旋转,我们无法确定导航栏是否nowplaying_vc是另一个导航控制器的一部分,或者只是位于顶部的位置为导航栏的导航栏UIBarPositionTopAttached.据我们所知,那里甚至没有导航栏,只有后面的V形图像视图(后栏按钮由图像视图和按钮组成).

我认为状态栏样式已经改变,viewWillAppear:并且viewWillDisappear:由于在交互式弹出手势期间存在不自然的感觉.我建议使用动画过渡,甚至更好,使用基于视图控制器的新状态栏样式,系统会自动进行过渡动画.


现代API的更新:

您应该使用animateAlongsideTransition:completion:animateAlongsideTransitionInView:animation:completion:API,而不是依靠的隐式动画viewWillAppear:viewWillDisappear:.