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 模拟器上的第一张图片不同):

在此处输入图像描述

4

1 回答 1

17

好的,所以在多玩了一些颜色之后,我设法获得了类似的模糊外观!

以前,我在导航栏外观上设置了 barTintColor,它具有以下值:

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

这在 iOS < 7.0.3 中很好,导航栏中的输出颜色(带有模糊效果)实际上是:

右:62 克:89 乙: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

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

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

希望这可以帮助。

于 2013-10-23T16:31:59.947 回答