所以我以前用过:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent
animated:YES];
为状态栏样式更改设置动画,从暗到亮,反之亦然
但是,自iOS 9以来,这种方法已被弃用。
我更改为在preferredStatusBarStyle isn't called
中关注@ serenn的回答后使用preferredStatusBarStyle
它确实可以改变旧式的状态栏样式,但没有动画。
文件说:
如果此方法的返回值发生更改,请调用setNeedsStatusBarAppearanceUpdate方法。
但是我不知道在哪里调用它,我试过将它放在viewWillAppear中,但没有运气。
preferredStatusBarUpdateAnimation
仍为默认设置:UIStatusBarAnimationFade
所以我很困惑。寻找如何动画为已弃用方法的答案。提前谢谢!
答案 0 :(得分:16)
好的,我花了两个小时搜索并尝试,想出来:
首先,您必须确保您的子视图控制器可以通过在preferredStatusBarStyle isn't called
中覆盖{@ 1}} @ serenn的答案来控制导航控制器中的状态栏样式为了获得动画,我必须在视图控制器出现之前和之后返回两种不同的样式:
var divEditWrapper = document.createElement("div");
divEditWrapper.id = "divEditWrapper";
divEditWrapper.style.cssText = "bottom: 0px; left: 0px; overflow: hidden; overflow-x: auto; position: absolute; right: 0px; top: 64px;";
divEdit.appendChild(divEditWrapper);
divDataHeaders = document.createElement("div");
divDataHeaders.style.cssText = "color: rgba(0,0,0,0.54); height: 54px; left: 0px; position: absolute; right: 0px; top: 0px; ";
divEditWrapper.appendChild(divDataHeaders);
divEditContent = document.createElement("div");
divEditContent.id = "divDataGridEditContent";
divEditContent.style.cssText = "bottom: 0px; overflow: hidden; overflow-y:auto; left: 0px; position: absolute; right: 0px; top: 54px;";
divEditWrapper.appendChild(divEditContent);
preferredStatusBarStyle
是一个BOOL,用于指示是否调用了-(UIStatusBarStyle)preferredStatusBarStyle {
if (!viewAppeared)
return UIStatusBarStyleDefault;
else
return UIStatusBarStyleLightContent; // your own style
}
:
viewAppeared
因此,当视图控制器未显示时,状态栏样式为viewWillAppear
,并将在- (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
。
然后致电UIStatusBarStyleLightContent
更新如下所示的更改,请注意viewWillAppear
必须拥有动画。
setNeedsStatusBarAppearanceUpdate
我以前发现您不必像下面那样致电animateWithDuration
,[UIView animateWithDuration:0.8 animations:^{
[self setNeedsStatusBarAppearanceUpdate];
}];
会再次调用preferredStatusBarStyle
:
setNeedsStatusBarAppearanceUpdate
虽然这个解决方案解决了这个问题,但我现在不选择使用它。我只能使用一行代码获得相同的结果,但现在我需要写的代码太多了。不推荐使用的API现在甚至都没有触发警告,所以在Apple继续推动我改变之前,我不会用这种方式。到时候,我希望有一个很好的解决方案。
我很困惑为什么Apple弃用了可以完成所有技巧的单行代码(preferredStatusBarStyle
),但使用更复杂的代码来实现相同的结果。即使你想要提供更细粒度的控制,Apple也不必弃用旧版本。
但也许我现在没找到最好的。希望有人能够让我高兴。