viewDidAppear
和viewWillAppear
中调整栏色调颜色,但无法复制相同的行为,并且无法防止栏按钮褪色。viewDidAppear
和viewWillAppear
中调整栏色调颜色,但无法复制相同的行为,并且无法防止栏按钮褪色。我刚刚下载了该应用程序以确保。使用了两个不同的导航栏。您可以通过使用交互式弹出手势来看到这一点。请注意,底部视图控制器上的导航栏会滑入和滑出。在普通的推送和弹出转换中,导航项只是在现有的栏上淡入淡出,而栏是固定的。这就是在现在播放视图控制器被推送之前发生的事情。
如果您快速查看现在播放视图控制器动画,您会看到底部导航栏消失。
从我的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
的导航栏。 我们甚至不知道那里是否有导航栏,只有一个后退倒三角形图片视图(后退栏按钮由图像视图和按钮组成)。
我认为在viewWillAppear:
和viewWillDisappear:
中更改状态栏样式是由于交互式弹出手势的不自然感觉。 我建议使用动画过渡,甚至更好地使用基于新视图控制器的状态栏样式,系统会自行动画过渡。
适用于现代API的更新:
您应该使用animateAlongsideTransition:completion:
或animateAlongsideTransitionInView:animation:completion:
API,而不是依赖于viewWillAppear:
和viewWillDisappear:
的隐式动画。
nowplaying_vc
中使用弹出手势。 - sooperviewWillAppear:
(或disappear)中将它设置为隐藏了吗?使用[self.navigationController setNavigationBarHidden:YES animated:YES];
将其隐藏。 - Léo Natananimated
设置为YES
就可以了!我在viewWillAppear:
中设置了隐藏,并在viewWillDisappear:
中取消隐藏,两者都是有动画效果的。不过很奇怪,为什么设置animated
会产生这种行为呢? - sooper与其隐藏和显示导航栏,你可以更新导航栏的alpha值。在转换期间,它会平稳地动画效果过渡。对于具有透明导航栏的视图控制器,不要修改导航栏,而是在第二个控制器的视图中手动创建一个导航栏(或仅是后退按钮和标题等)。然后,我们将在从第一个视图控制器到第二个视图控制器的转换中隐藏导航栏。
在你的第一个控制器的 viewWillDisappear
和第二个控制器的 viewWillAppear:
中,使用 self.navigationController.navigationBar.alpha = 0;
将导航栏的alpha值设置为零。由于这是在动画块中,这将使导航栏在推送动画期间消失。
在第一个控制器的 viewWillAppear
和第二个控制器的 viewWillDisappear
中将alpha值重新设置为一。