2011-02-14 2 views
6

J'ai un UIToolbar avec l'alpha mis à .6. Il a l'air génial - mais il laisse aussi les boutons avec un alpha de .6, ce qui est correct mais pas vraiment souhaitable. Y at-il un moyen de définir indépendamment l'alpha d'un UIBarButtonItem? Comment est-ce que je devrais obtenir ces derniers sembler blancs au lieu de légèrement grisés?UIToolBar avec alpha réduit, voulez que UIBarButtonItem ait alpha 1

Répondre

12

Lorsque vous définissez l'alpha sur une vue, toutes les sous-vues sont composées avec la même valeur alpha. Ce que vous pouvez faire au lieu de définir l'alpha sur la vue elle-même est d'utiliser une couleur de teinte ou une couleur d'arrière-plan avec une valeur alpha. Cela peut produire des effets similaires, sans que toutes les sous-vues héritent de la transparence.

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

Si cela ne fonctionne pas et vous avez réellement besoin de faire le point de vue elle-même transparente, vous devrez retravailler votre hiérarchie de vue afin que les vues ne sont pas opaques subviews. Étant donné que les éléments de bouton de barre ne sont pas disponibles en tant que vues standard, il ne sera probablement pas utilisable dans le cas de la barre d'outils.

+1

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

+0

Cette réponse http://stackoverflow.com/a/5149484/1250436 est meilleure. – ohcibi

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

Afficher l'opacité définie sur 1 et ces paramètres l'ont fait pour moi.

+1

C'est la meilleure réponse – respectTheCode

+0

Vous pouvez également définir ceci dans InterfaceBuilder/Storyboard (Style "Translucide Black") – ohcibi

1

Au-dessus n'a pas fonctionné pour moi dans iOS 4.3, mais cela a fait:

Sous UIToolbar, fournir une méthode:

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

J'ai trouvé que barStyle does'n réellement d'importance. Aucune n'est la définition de la couleur d'arrière-plan pour effacer.

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

Ces lignes ont fait le travail pour moi (ios4.3). Comme je peux le comprendre, en définissant la propriété transférable de barre d'outils sur OUI, vous l'avez définie avec un arrière-plan clair (transparent). Bien sûr, cela dépend de la couleur de teinte que vous avez définie. S'il ne contient pas de composant alpha, la barre sera opaque.

1

Le principal problème avec le contrôle de la valeur alpha de la barre d'outils est qu'elle s'applique à l'ensemble de la barre d'outils et à ses boutons. Si vous définissez un backgroundColor avec une valeur alpha < 1, la couleur résultante est combinée avec le barStyle (UIBarStyleDefault ou UIBarStyleBlack), ce qui donne une couleur plus opaque que la couleur originale backgroundColor. Si vous définissez le barTintColor, il semble remplacer tous les autres paramètres, y compris la valeur alpha que vous avez définie, ce qui entraîne une couleur complètement opaque.

La seule façon dont j'ai été capable de réduire l'alpha de la barre d'outils sans affecter ses boutons est par setting its background image via setBackgroundImage:forToolbarPosition:barMetrics:. Vous pouvez créer un 1px par 1px image avec la couleur souhaitée et 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 version]

Ensuite, définir l'image d'arrière-plan:

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

Ceci est la bonne réponse pour iOS 9 – user8030

0

Après plusieurs heures l'évaluation de chaque méthodes ci-dessus, J'ai trouvé seulement la méthode fournie par Ryan H. est faisable. C'est parce que c'est la méthode que vous pouvez manipuler la valeur alpha tandis que d'autres ne peuvent pas.

Voici la version pour 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 
}