iOS 7推送动画期间状态栏颜色。

6
我的应用程序有一个实心灰色的导航栏,为了适应iOS 7的设计,我希望状态栏也是相同的颜色。为了实现这一点,我设置了edgesForExtendedLayout = UIRectEdgeNoneextendedLayoutIncludesOpaqueBars = YES,并在我的plist中将View controller-based status bar appearance设置为YES。为了创建灰色状态栏的颜色,我将MainWindow的背景颜色设置为灰色。这个方法很有效,但是在推送或弹出动画时会出现问题。在动画期间,状态栏闪烁着颜色,看起来灰度值加倍。当动画结束时,它会恢复到正确的灰色。
有人知道可能发生了什么吗?我应该以不同的方式设置状态栏颜色来匹配导航栏颜色吗?

你尝试在模拟器中减慢动画速度,以便观察动画了吗?这样做时,你可能会看到一些明显的东西。 - dtrotzjr
@dtrotzjr,我已经做了。唯一减慢的动画是导航栏的推送动画。屏幕的推送动画和状态栏都没有减慢。 - Woogie
即使使用普通的动画速度,似乎推送的视图控制器的状态栏颜色与底部视图控制器的状态栏颜色重叠,从而造成灰色强度加倍。不确定为什么会发生这种情况。 - Woogie
1个回答

4
你是使用背景图片还是调色板颜色来设置导航栏的背景?如果你使用的是背景图片(由于你有一个纯灰色背景,看起来像这样),则需要确保它高64个点(在视网膜屏上为128个像素)。如果你使用旧的iOS 6尺寸(44个点),iOS 7 就会退回并且不包括状态栏。关于此行为的详细信息,请查看“屏幕顶部的可调整大小的背景图像的处理”5-1 iOS 7转换文档

此外,如果是这种情况,则不需要设置edgesForExtendedLayoutextendedLayoutIncludesOpaqueBarsView controller-based status bar appearance。您可能需要它们来完成其他工作,但不是为了这个。

如果你仍然想支持iOS 6,就需要两个不同的背景图片,一个用于iOS 7及以上版本,另一个用于iOS 6及以下版本。这样应该能达到你想要的效果。


嗨,Thomas,我实际上有一个自定义的UINavigationBar,并覆盖了它的drawRect方法,使用CGContextSetFillColor和CGContextFillRect将矩形填充为灰色。 - Woogie
我从drawRect切换到使用背景图像,现在一切都可以正确地进行动画了。副作用是现在导航栏底部有默认的iOS7 1px线,但这不应该是什么大问题。谢谢! - Woogie
另外,为了回答完整性,要想去除导航栏的阴影,你可以将阴影图像设置为空白图像。 - Woogie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接