我有一个UIToolbar,alpha设置为.6。看起来很棒 - 但它也留下了.6的alpha按钮,这是好的,但不是很理想。有没有办法独立设置UIBarButtonItem的alpha?我怎么能让它们看起来是白色而不是略带灰色?
答案 0 :(得分:12)
在视图上设置alpha时,所有子视图都会使用相同的Alpha值进行合成。你可以做的不是在视图上设置alpha,而是使用带有alpha值的色调颜色或背景颜色。这可以产生类似的效果,而不会导致所有子视图继承透明度。
toolbar.tintColor = [[UIColor blackColor] colorWithAlphaComponent:0.6];
如果这不起作用并且您实际上需要使视图本身透明,则必须重新编写视图层次结构,以使不透明视图不是子视图。由于条形按钮项目不可用作标准视图,因此它可能无法在工具栏中使用。
答案 1 :(得分:12)
self.bottomToolbar.barStyle = UIBarStyleBlack;
self.bottomToolbar.translucent = YES;
self.bottomToolbar.backgroundColor = [UIColor clearColor];
查看不透明度设置为1,这些设置为我做了。
答案 2 :(得分:1)
上面在iOS 4.3中对我不起作用,但是这样做了:
子类UIToolbar,提供一种方法:
- (void)drawRect:(CGRect)rect
{
[[UIColor colorWithWhite:0 alpha:0.6f] set]; // or clearColor etc
CGContextFillRect(UIGraphicsGetCurrentContext(), rect);
}
答案 3 :(得分: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分量,那么条形图将是不透明的。
答案 4 :(得分:1)
控制工具栏alpha值的主要问题是它适用于整个工具栏及其按钮。如果您将backgroundColor
设置为某个alpha值< 1,结果颜色与barStyle
(UIBarStyleDefault或UIBarStyleBlack)组合,导致颜色比原始backgroundColor
更不透明。如果设置barTintColor
,它似乎会覆盖所有其他设置,包括您设置的任何Alpha值,从而产生完全不透明的颜色。
我能够做的唯一方法是减少工具栏的alpha而不影响其按钮是setting its background image via setBackgroundImage:forToolbarPosition:barMetrics:
。您可以使用所需的颜色和alpha创建1px x 1xx图像:
+ (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;
}
然后设置背景图像:
[toolbar setBackgroundImage:[self onePixelImageWithColor:[[UIColor blackColor] colorWithAlphaComponent:0.7]]
forToolbarPosition:UIBarPositionBottom
barMetrics:UIBarMetricsDefault];
答案 5 :(得分: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
}