问题描述
这可能吗?
我想在我的视图控制器中(在动画中)更改导航栏的alpha值,但是如果我执行self.navigationController.navigationBar.alpha = 0.0;
,则NavigationBar占据的屏幕部分会完全消失,并留下一个黑框,这不是我想要的(我希望它是self.view
背景的颜色).
I want to change the alpha value of the navigation bar in my view controller (in an animation), but if I do self.navigationController.navigationBar.alpha = 0.0;
, the portion of the screen the navigationBar took up totally disappears and leaves a black box, which is not what I'd like (I'd prefer it to be the color of self.view
's background).
推荐答案
当我支持Colin的答案时,我想向您提供其他提示,以自定义包括alpha字母的UINavigationBar的外观.
As I support Colin's answer, I want to give you an additional hint to customize the appearance of an UINavigationBar including the alpha.
诀窍是在导航栏中使用 UIAppearance .这使您可以将UIImage分配到NavigationBar的 backgroundImage .您可以通过编程方式生成这些UIImage,并将其用于该UIColors,并根据需要设置颜色的alpha属性.我已经在自己的一个应用程序中完成了此操作,并且按预期运行.
The trick is to use UIAppearance for your NavigationBar. This enables you to assign an UIImage to your NavigationBar's backgroundImage. You can generate these UIImages programmatically and use for that UIColors and set the colors' alpha properties as you want. I've done this in one of my own applications and it works as expected.
在这里,我给您提供一些代码段:
Here I give you some code snippets:
-
例如在您的..AppDelegate.m中,在didFinishLaunchingWithOptions中添加以下行:
E.g. in your ..AppDelegate.m add these lines in didFinishLaunchingWithOptions:
//create background images for the navigation bar
UIImage *gradientImage44 = nil; //replace "nil" with your method to programmatically create a UIImage object with transparent colors for portrait orientation
UIImage *gradientImage32 = nil; //replace "nil" with your method to programmatically create a UIImage object with transparent colors for landscape orientation
//customize the appearance of UINavigationBar
[[UINavigationBar appearance] setBackgroundImage:gradientImage44 forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearance] setBackgroundImage:gradientImage32 forBarMetrics:UIBarMetricsLandscapePhone];
[[UINavigationBar appearance] setBarStyle:UIBarStyleDefault];
实施便捷方法以编程方式创建UIImage对象,例如为UIImage创建新类别:
Implement convenience methods to programmatically creates UIImage objects, e.g. create a new category for UIImage:
//UIImage+initWithColor.h
//
#import <UIKit/UIKit.h>
@interface UIImage (initWithColor)
//programmatically create an UIImage with 1 pixel of a given color
+ (UIImage *)imageWithColor:(UIColor *)color;
//implement additional methods here to create images with gradients etc.
//[..]
@end
//UIImage+initWithColor.m
//
#import "UIImage+initWithColor.h"
#import <QuartzCore/QuartzCore.h>
@implementation UIImage (initWithColor)
+ (UIImage *)imageWithColor:(UIColor *)color
{
CGRect rect = CGRectMake(0, 0, 1, 1);
// create a 1 by 1 pixel context
UIGraphicsBeginImageContextWithOptions(rect.size, NO, 0);
[color setFill];
UIRectFill(rect);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
在1中重新创建图像.(在AppDelegate.m中#import"UIImage + initWithColor.h"并替换为"nil"):
Re-work your image creation in 1. (#import "UIImage+initWithColor.h" in AppDelegate.m and replace the "nil"s):
这是您的关注点:通过更改颜色的alpha属性,您也在影响NavigationBar的不透明度!
UIImage *gradientImage44 = [UIImage imageWithColor:[UIColor colorWithRed:1.0 green:0.0 blue:1.0 alpha:0.2]];
UIImage *gradientImage32 = [UIImage imageWithColor:[UIColor colorWithRed:1.0 green:0.0 blue:1.0 alpha:0.2]];
我创建了一个小的 demo项目,并为您添加了两个屏幕截图:视图本身具有黄色backgroundColor.NavigationBar的backgroundImages为红色.屏幕截图1显示了NavigationBar,其alpha值为0.2.屏幕截图2显示了一个NavigationBar,其alpha值为0.8.
I created a small demo project and add you two screenshots:the view itself has a yellow backgroundColor.The backgroundImages of the NavigationBar have a red color.Screenshot 1 shows a NavigationBar with a value for alpha = 0.2.Screenshot 2 shows a NavigationBar with a value for alpha = 0.8.
这篇关于更改导航栏的Alpha值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!