如何在iPhone 5S和5之间统一导航栏的半透明效果?

6

我在iPhone 5和5S之间无法统一UINavigationBar的barTintColor。我的两个手机都运行iOS 7。在下面的屏幕截图中,顶部是5S,底部是5。iPhone 5S显示了极其半透明的效果,而iPhone 5则显示了更加微妙的效果。只有非常暗的对象才会在iPhone 5的导航栏后面可见。

[[UINavigationBar appearanceWhenContainedIn:[UINavigationController class], nil]
    setBarTintColor:[UIColor 
        colorWithRed:46.0 / 255.0 
        green:160.0 / 255.0 
        blue:152.0 / 255.0 
        alpha:0.8
    ]
];

enter image description here

我希望两款手机看起来都像iPhone 5。如果我将barTintColor的alpha值增加到1.0,iPhone 5的导航栏会变得完全不透明,这是预期的结果。虽然iPhone 5S的栏会变得较少半透明,但效果仍然过于强烈。我该如何进一步减少半透明度,而不让它完全不透明?


1
这两个设备都运行着iOS7,但它们是否运行着相同的iOS7版本?iOS 7.0.3已经进行了更改,并且在iOS 7.1 beta 1中进行了进一步的更改。 - Léo Natan
5S已经升级到7.0.2。而5则是iOS 7.0.4版本。我现在会升级5S,看看是否有所改善。 - Pwner
更新5S将产生重大影响。 - Aaron Brager
如何在iOS7.1和iOS8上实现类似第一张顶部图片的模糊效果?我在这里创建了一个问题:http://stackoverflow.com/questions/29129845/uinavigationbar-blur-ios-7-1-and-above - Matrosov Oleksandr
2个回答

4

在评论中讨论过,您看到不同的行为是因为其中一个设备使用了过时的iOS 7版本。苹果在版本7.0.3中对栏色调颜色处理方式进行了更改,现在会考虑透明度值。您应该关注更新的iOS版本。


是的,那就是问题所在。在iOS 7.0.4中,alpha值受到尊重。很遗憾每个人都会以不同的方式查看我的应用程序。 - Pwner
4
为雪上加霜,苹果在iOS 7.1 beta中再次修改了算法。建议您更新其中一个开发设备并使用7.1 SDK进行编译,以查看您的应用程序是否仍然正常。 - Léo Natan
确认了。在7.1中又改变了。真遗憾,所以基本上只有少数用户留在7.0.3 - 7.0.6版本才有“工作”的alpha值。 - czaku
wtf...在7.1中又改变了...但是为什么???设置alpha值的功能很有用啊... - LombaX

3
如果您仍然希望在iOS 7.1中为导航栏设置alpha值,我发现了一个解决方法。首先从带有alpha值的颜色创建一张图片,然后将该图片分配为导航栏的背景:
1-以下是从颜色创建图像的方法:
    -(UIImage *)imageWithColor:(UIColor *)color {
    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);

    UIGraphicsBeginImageContext(rect.size);

    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextFillRect(context, rect);

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
}

我在这里找到了它:从UIColor创建UIImage以用作UIButton的背景图像

//create a colour and set its alpha:

UIColor *colorWithAlpha = [UIColor colorWithRed:(80/255.f) green:(146/255.f) blue:(84/255.f) alpha:0.2]; // light red colour

// create your background image:
UIImage *backgroundImage = [self imageWithColor: colorWithAlpha];

//set this image as a background image:    
[self.navigationController.navigationBar setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];

self.navigationController.navigationBar.shadowImage = [[UIImage alloc] init]; // to remove shadow

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