UIToolBar透明度降低,希望UIBarButtonItem的透明度为1。

6

我有一个alpha设置为0.6的UIToolbar。看起来很不错 - 但是它也会将按钮的alpha设置为0.6,这还可以,但并不是很理想。有没有办法单独设置UIBarButtonItem的alpha?如何使它们看起来是白色而不是略带灰色?

6个回答

12

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

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

如果这个方法不起作用,而你确实需要使视图本身透明,那么你将不得不重新设计你的视图层次结构,以便不将不透明的视图作为子视图。由于工具栏按钮项不是标准视图,因此在工具栏情况下可能无法使用。


1
self.bottomToolbar.barStyle = UIBarStyleBlack; self.bottomToolbar.translucent = YES; self.bottomToolbar.backgroundColor = [UIColor clearColor]; - Chris Roberts

12
self.bottomToolbar.barStyle = UIBarStyleBlack;
self.bottomToolbar.translucent = YES;
self.bottomToolbar.backgroundColor = [UIColor clearColor];

将视图的不透明度设为1,这些设置对我起了作用。


你也可以在InterfaceBuilder/Storyboard中设置它(样式为“半透明黑色”)。 - ohcibi

1

上面的方法在iOS 4.3上对我无效,但是这个可以:

子类化UIToolbar,提供一个方法:

- (void)drawRect:(CGRect)rect 
{
[[UIColor colorWithWhite:0 alpha:0.6f] set]; // or clearColor etc
CGContextFillRect(UIGraphicsGetCurrentContext(), rect);
}

1
我发现barStyle实际上并不重要。清除设置背景颜色也无济于事。
self.toolbar.barStyle = UIBarStyleDefault;
self.toolbar.tintColor = [UIColor colorWithWhite:0.0 alpha:0.5];
self.toolbar.translucent = YES;

这些代码对我很有用(ios4.3)。 据我所知,将工具栏的transfluent属性设置为YES,就是将其设置为透明背景。当然,这取决于您设置的色调颜色。如果它不包含alpha分量,则该栏将是不透明的。


1
控制工具栏alpha值的主要问题是它适用于整个工具栏及其按钮。如果您设置了带有某些alpha值<1的backgroundColor,则生成的颜色将与barStyle(UIBarStyleDefault或UIBarStyleBlack)结合使用,这会导致比原始backgroundColor更不透明的颜色。如果您设置barTintColor,则似乎会覆盖所有其他设置,包括您设置的任何alpha值,从而产生完全不透明的颜色。
我能够在不影响其按钮的情况下减少工具栏alpha的唯一方法是通过通过setBackgroundImage:forToolbarPosition:barMetrics:设置其背景图像。您可以创建一个1px x 1px的图像,并设置所需的颜色和alpha值:
+ (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版本]

然后设置背景图片:

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

0
经过多个小时的评估,我发现只有 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
}

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