如何设置自iOS 9以来状态栏样式更改的动画
所以我以前用:如何设置自iOS 9以来状态栏样式更改的动画,ios,Ios,所以我以前用: [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES]; 要设置状态栏样式的动画,请从暗变为亮,反之亦然 但是,自iOS 9以来,此方法已被弃用 在@serenn的回答之后,我改为使用preferredStatusBarStyle 它确实可以以旧的方式更改
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent
animated:YES];
要设置状态栏样式的动画,请从暗变为亮,反之亦然
但是,自iOS 9以来,此方法已被弃用
在@serenn的回答之后,我改为使用preferredStatusBarStyle
它确实可以以旧的方式更改状态栏样式,但不需要动画
文件说:
如果此方法的返回值更改,请调用setNeedsStatusBarAppearanceUpdate方法。
但我不知道该怎么称呼它,我试着把它放在视图中,但没有运气
preferredStatusBarUpdateAnimation
保留为默认值:UIStatusBarAnimationFade
所以我很困惑。正在查找有关如何作为不推荐的方法设置动画的答案。提前谢谢 好的,我花了两个小时搜索和尝试,找到了答案: 首先,您必须确保您的子视图控制器可以通过覆盖
preferredStatusBarStyle
来控制导航控制器中的状态栏样式,就像@serenn在中的回答一样
为了制作动画,我必须在视图控制器出现之前和之后返回两种不同的样式,如下所示:
-(UIStatusBarStyle)preferredStatusBarStyle {
if (!viewAppeared)
return UIStatusBarStyleDefault;
else
return UIStatusBarStyleLightContent; // your own style
}
视图显示
是一个BOOL,用于指示是否调用了视图显示
:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
viewAppeared = YES;
[UIView animateWithDuration:0.8 animations:^{
[self setNeedsStatusBarAppearanceUpdate];
}];
}
-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
viewAppeared = NO;
}
因此,当视图控制器未显示时,状态栏样式为UIStatusBarStyleDefault
,并将在viewwillbeen中更改为UIStatusBarStyleLightContent
然后调用setneedssstatusbarappearanceupdate
更新如下更改,注意animateWithDuration
是制作动画的必备条件
[UIView animateWithDuration:0.8 animations:^{
[self setNeedsStatusBarAppearanceUpdate];
}];
我曾经发现您不必先调用preferredStatusBarStyle
,如下图所示,setneedssstatusbarappearanceupdate
将再次调用preferredStatusBarStyle
:
[UIView animateWithDuration:0.8 animations:^{
[self preferredStatusBarStyle];
[self setNeedsStatusBarAppearanceUpdate];
}];
虽然这个解决方案解决了问题,但我现在不选择使用它。我可以用一行代码得到相同的结果,但是现在我要写的代码太多了。不推荐使用的API现在甚至不会触发警告,所以在苹果不断敦促我改变之前,我不会使用这种方式。到时候我希望有一个好的解决办法
我非常困惑,为什么苹果不赞成使用一行代码([UIApplication sharedApplication]setStatusBarStyle]…
),它可以完成所有的技巧,但使用更复杂的代码来实现相同的结果。即使您希望提供更细粒度的控制,苹果也不必反对旧的控制
但也许我现在没有找到最好的。希望有人能启发我