2011-02-14 113 views

回答

12

当您在视图上设置Alpha时,所有子视图都会使用相同的Alpha值进行合成。你可以做什么而不是在视图本身上设置阿尔法,就是使用具有阿尔法值的色调或背景色。这可以产生类似的效果,而不会导致所有子视图继承透明度。

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

如果不工作,你真正需要做的视图本身透明,你将不得不返工您的视图层次,这样的不透明观点并不子视图。由于条形按钮项目不能用作标准视图,因此它可能不会在工具栏的情况下可行。

+1

self.bottomToolbar。barStyle = UIBarStyleBlack; self.bottomToolbar.translucent = YES; self.bottomToolbar.backgroundColor = [UIColor clearColor]; – 2011-03-01 01:13:49

+0

这个答案http://stackoverflow.com/a/5149484/1250436更好。 – ohcibi 2013-01-24 12:25:06

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

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

+1

这是更好的答案 – respectTheCode 2011-03-23 16:15:55

1

上面没有我在的iOS 4.3工作,但这并:

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

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

我发现barStyle does'n实际上很重要。无论是设置背景颜色清除。

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值的主要问题是它适用于整个工具栏及其按钮。如果将某个backgroundColor设置为某个阿尔法值< 1,则生成的颜色与barStyle(UIBarStyleDefault或UIBarStyleBlack)相结合,导致比原始backgroundColor更不透明的颜色。如果您设置了barTintColor,它似乎会覆盖所有其他设置,包括您设置的任何Alpha值,从而导致完全不透明的颜色。

我已经能够做到的唯一方法是在不影响其按钮的情况下减少工具栏的alpha值,是setting its background image via setBackgroundImage:forToolbarPosition:barMetrics:。可以通过1px的图像具有所需颜色和alpha创建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]; 
0

许多小时评估上述各方法之后,我发现只有Ryan H.提供的方法是可行的。这是因为这是您可以操纵Alpha值而其他人无法操作的方法。

这里是斯威夫特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 
}