UIToolBar 具有降低的 alpha,希望 UIBarButtonItem 具有 alpha 1

Posted

技术标签:

【中文标题】UIToolBar 具有降低的 alpha,希望 UIBarButtonItem 具有 alpha 1【英文标题】:UIToolBar with reduced alpha, want UIBarButtonItem to have alpha 1 【发布时间】:2011-02-14 20:29:22 【问题描述】:

我有一个 alpha 设置为 0.6 的 UIToolbar。看起来很棒 - 但它也使按钮的 alpha 为 0.6,这还可以,但并不是很理想。有没有办法独立设置 UIBarButtonItem 的 alpha?我怎样才能让这些看起来是白色而不是略微变灰?

【问题讨论】:

【参考方案1】:

当您在视图上设置 alpha 时,所有子视图都使用相同的 alpha 值进行合成。除了在视图本身上设置 alpha 之外,您可以做的是使用带有 alpha 值的色调或背景颜色。这可以产生类似的效果,而不会导致所有子视图都继承透明度。

toolbar.tintColor = [[UIColor blackColor] colorWithAlphaComponent:0.6];

如果这不起作用并且您实际上需要使视图本身透明,则必须重新设计视图层次结构,以使不透明的视图不是子视图。由于栏按钮项不能作为标准视图使用,因此它可能无法在工具栏的情况下使用。

【讨论】:

self.bottomToolbar.barStyle = UIBarStyleBlack; self.bottomToolbar.translucent = YES; self.bottomToolbar.backgroundColor = [UIColor clearColor];【参考方案2】:
self.bottomToolbar.barStyle = UIBarStyleBlack;
self.bottomToolbar.translucent = YES;
self.bottomToolbar.backgroundColor = [UIColor clearColor];

查看不透明度设置为 1,这些设置为我做了。

【讨论】:

你也可以在InterfaceBuilder/Storyboard中设置(样式“半透明黑色”)【参考方案3】:

以上方法在 ios 4.3 中对我不起作用,但确实如此:

子类UIToolbar,提供一种方法:

- (void)drawRect:(CGRect)rect 

[[UIColor colorWithWhite:0 alpha:0.6f] set]; // or clearColor etc
CGContextFillRect(UIGraphicsGetCurrentContext(), rect);

【讨论】:

【参考方案4】:

我发现 barStyle 实际上并不重要。也没有将背景颜色设置为清除。

self.toolbar.barStyle = UIBarStyleDefault;
self.toolbar.tintColor = [UIColor colorWithWhite:0.0 alpha:0.5];
self.toolbar.translucent = YES;

那些行为我完成了工作(ios4.3)。 据我所知,将工具栏的 transfluent 属性设置为 YES 您已将其设置为具有清晰(透明)背景。当然,这取决于您设置的色调颜色。如果它不包含 alpha 分量,则该条将是不透明的。

【讨论】:

【参考方案5】:

控制工具栏的 alpha 值的主要问题是它适用于整个工具栏及其按钮。如果您设置一个backgroundColor 的某个alpha 值barStyle(UIBarStyleDefault 或UIBarStyleBlack)组合,从而产生比原始backgroundColor 更不透明的颜色。如果您设置barTintColor,它似乎会覆盖所有其他设置,包括您设置的任何 alpha 值,从而导致颜色完全不透明。

我能够在不影响其按钮的情况下减少工具栏的 alpha 的唯一方法是通过 setting its background image via setBackgroundImage:forToolbarPosition:barMetrics:。您可以使用所需的颜色和 alpha 创建一个 1px x 1px 的图像:

+ (UIImage *)onePixelImageWithColor:(UIColor *)color 
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(NULL, 1, 1, 8, 0, colorSpace, (CGBitmapInfo)kCGImageAlphaPremultipliedFirst);
    CGContextSetFillColorWithColor(context, color.CGColor);
    CGContextFillRect(context, CGRectMake(0, 0, 1, 1));
    CGImageRef imgRef = CGBitmapContextCreateImage(context);
    UIImage *image = [UIImage imageWithCGImage:imgRef];
    CGImageRelease(imgRef);
    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);
    return image;

[Swift version]

然后设置背景图片:

[toolbar setBackgroundImage:[self onePixelImageWithColor:[[UIColor blackColor] colorWithAlphaComponent:0.7]]
         forToolbarPosition:UIBarPositionBottom
                 barMetrics:UIBarMetricsDefault];

【讨论】:

【参考方案6】:

经过数小时评估上述每种方法后,我发现只有 Ryan H. 提供的方法是可行的。这是因为这是您可以操纵 alpha 值而其他人无法操纵的方法。

这是 Swift 3 的版本:

override func viewDidLoad() 
    super.viewDidLoad()

    let bgImageColor = UIColor.black.withAlphaComponent(0.6) //you can adjust the alpha value here
    self.upperToolBar.setBackgroundImage(onePixelImageWithColor(color: bgImageColor),
          forToolbarPosition: .any,
          barMetrics: UIBarMetrics.default)


func onePixelImageWithColor(color : UIColor) -> UIImage 
    let colorSpace = CGColorSpaceCreateDeviceRGB()
    let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue)
    var context = CGContext(data: nil, width: 1, height: 1, bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: bitmapInfo.rawValue)
    context!.setFillColor(color.cgColor)
    context!.fill(CGRect(x:0,y: 0, width: 1, height:1))
    let image = UIImage(cgImage: context!.makeImage()!)
    return image

【讨论】:

以上是关于UIToolBar 具有降低的 alpha,希望 UIBarButtonItem 具有 alpha 1的主要内容,如果未能解决你的问题,请参考以下文章

如何用 UIToolbar 之类的色调绘制 UIButton

UINavigation 控制器 UIViewController 和 UItoolbar 作为子视图问题

QImage在具有透明度的PNG中设置alpha

UIToolbar 具有半透明而不是黑色

iOS7 无法淡化 UIToolbar 或 UITabbar

使 UIToolBar 和 UISearchBar 具有哑光黑色背景