2011-02-14 89 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 
}