iOS 7.0.3中状态栏透明度消失了

36

比较这两张截图:

在iOS 7.0模拟器上完成

输入图像描述

以及在iOS 7.0.3的iPhone 4S上完成的那张:

输入图像描述

这里和那里的代码完全相同,也是一样的东西!有什么想法为什么现实设备上没有透明效果?

我有这段代码来模拟它(我知道这可能很尴尬并且不正确,但事实就是这样):

topMenuView = [[UIView alloc] initWithFrame:CGRectMake(self.view.frame.origin.x, 0, self.view.frame.size.width, TOP_BAR_ORIG_HEIGHT)];
topMenuView.clipsToBounds = YES;
UIToolbar *topMenuViewBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, -4, self.view.frame.size.width, TOP_BAR_ORIG_HEIGHT + 4)];
topMenuViewBar.barStyle = UIBarStyleDefault;
topMenuViewBar.barTintColor = [BSFunctions getColorFromHex:@"1ea6ff"];
const CGFloat statusBarHeight = 20;

UIView *underlayView = [[UIView alloc] initWithFrame:CGRectMake(0, -statusBarHeight, topMenuViewBar.frame.size.width, topMenuViewBar.frame.size.height + statusBarHeight)];
[underlayView setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];
[underlayView setBackgroundColor:[BSFunctions getColorFromHex:@"1ea6ff"]];
[underlayView setAlpha:0.36f];
[topMenuViewBar insertSubview:underlayView atIndex:1];
UIView *underlayView2 = [[UIView alloc] initWithFrame:CGRectMake(0, -statusBarHeight, topMenuViewBar.frame.size.width, topMenuViewBar.frame.size.height + statusBarHeight)];
[underlayView2 setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight)];
[underlayView2 setBackgroundColor:[BSFunctions getColorFromHex:@"0291ff"]];
[underlayView2 setAlpha:0.36f];
[topMenuViewBar insertSubview:underlayView2 atIndex:2];
[topMenuView addSubview:topMenuViewBar];
[self.view addSubview:topMenuView];
主要问题在于它之前在设备上可以工作!但在iOS 7.0.3发布后发生了变化。我注意到Facebook和Fitocracy的iOS应用程序中存在相同的行为。 更新 在具有iOS 7.0.3模拟器的Xcode 5.0.1上,我们有以下内容(与iOS 7.0模拟器上的第一张图像不同,您可以看到): enter image description here

1
您在 iPhone 的辅助功能中关闭了动态效果等选项吗? - Fogmeister
@Mutix认为这是一个bug吗?有趣的是,在iOS 7.0.3之前的版本中,用户仍然使用旧样式。 - Sergey Grischyov
3
老实说,我不知道。在苹果开发者论坛中有一个帖子,有人提交了一个雷达以获取更多信息。值得关注一下:https://devforums.apple.com/thread/210495?tstart=0 - Mutix
我们的应用程序也遇到了同样的问题。我们正在努力纠正。在我们找到解决方法后会进行更新。(这也影响了Facebook应用程序) - user2910990
1
我的应用程序刚刚获得批准,正在等待开发者发布,但是它看起来非常丑陋,导航栏和选项卡栏的颜色不正确,没有模糊效果,而且应用商店截图并不能代表现在的样子。我不知道是否等待更多信息再发布它,还是完全撤回并提交另一个版本,其中包括实心颜色条和无透明度。发布说明或更改日志中也没有任何内容涉及此问题。现在感到相当恼火! - Mutix
显示剩余9条评论
1个回答

17

好的,经过我对颜色进行了一些尝试后,我设法通过模糊效果获得了类似的外观!

以前,我在导航栏外观上设置了barTintColor,其值如下:

R:17 G:63 B:95 A:1

这在iOS小于7.0.3中还好,在带有模糊效果的导航栏中实际上输出的颜色是:

R:62 G:89 B:109

自从iOS 7.0.3以来,barTintColor似乎考虑到我们设置的颜色的alpha值。这意味着导航栏实际上输出了一个纯色17,63,95,而没有模糊效果。

获取模糊效果的关键是在barTintColor中设置alpha < 1。

经过数次猜测和尝试不同的RGB值,我使用以下RGBA获得了与导航栏(和标签)完全相同的RGB输出:

R:4.5 G:61.6 B:98 A:0.65

看起来并没有一个神奇的比例可以应用于之前的颜色以获得新的颜色。

无论如何,我实际上已经拒绝了今天下午批准的二进制文件,并使用这些新值重新提交,以便用户不会得到丑陋的应用程序:)

希望这可以帮助到您。


那么你是否真的使用它得到了模糊效果?当我们改变 barTintColor 的 alpha 值时,我们只会得到一个半透明的视图... - jjxtra
好的,Alpha颜色确实会改变事物,但是移动模糊视图会导致非常严重的闪烁。 - jjxtra
iOS 7.0.3之前的iOS 7版本兼容性如何?我们是否需要保留两个版本的代码? - Sergey Grischyov
请记住,您也可以更改barStyle,我发现有时使用UIBarStyleBlack可以获得更好的模糊效果,具体取决于我尝试模糊的颜色。我真的希望他们把它恢复到7.0.4中的原样,然后别再管它了!但由于这是未记录的功能,他们可以随心所欲地做任何事情,所以我不抱太大希望! - Sam
4
在iOS 7.1中,它似乎又有所改变。 - Mutix
显示剩余3条评论

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