欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[IOS]设置NavigationBar的颜色

程序员文章站 2022-03-26 19:19:34
...

转自:http://www.jianshu.com/p/d0c2ce8f0318?utm_campaign=maleskine&utm_content=note&utm_medium=reader_share&utm_source=weibo

 

在开发APP时,当前为了让APP更加美观,经常会给NavigationBar设置一个颜色,如果你直接给navigationBar设置颜色,

self.navigationController.navigationBar.backgroundColor = [UIColor whiteColor];
    self.navigationController.navigationBar.barTintColor = [UIColor whiteColor];

会发现根本达不到效果,呈现出来的颜色根本不是设置的颜色,这是因为系统的navigation设置的透明度的原因
那怎样才能达到想要的效果呢,你需要一张图片,然后设置它的图片就OK了

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navibar_white"] forBarMetrics:(UIBarMetricsDefault)];

 

*经过测试,发现IOS9以上两种方法效果一样的。

 

如果你说还需要一张图片太麻烦了,那你可以给UIImage增加一个类目color

@interface UIImage (Color)
/**
 *  @brief  根据颜色生成纯色图片
 *
 *  @param color 颜色
 *
 *  @return 纯色图片
 */
@end

@implementation UIImage (Color)
/**
 *  @brief  根据颜色生成纯色图片
 *
 *  @param color 颜色
 *
 *  @return 纯色图片
 */
+ (UIImage *)imageWithColor:(UIColor *)color {
    CGRect rect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextFillRect(context, rect);

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
}
@end

代码就不需要图片了

[self.navigationController.navigationBar setBackgroundImage:[UIImage imageWithColor:[UIColor whiteColor]] forBarMetrics:(UIBarMetricsDefault)];

以后如果需要纯色的图片,自己生成就好了
比如在我们使用button的时候,会给button设置不同状态的不同的颜色值,省去了给UI要图片的麻烦了

[self.codeButton setBackgroundImage:[UIImage imageWithColor:[UIColor whiteColor]] forState:(UIControlStateNormal)];
    [self.codeButton setBackgroundImage:[UIImage imageWithColor:[UIColor whiteColor]] forState:(UIControlStateDisabled)];
    [self.codeButton setBackgroundImage:[UIImage imageWithColor:[UIColor whiteColor] forState:(UIControlStateHighlighted)];

正常时候的颜色,按下去的颜色,不能按时候的颜色是不是都有了呢
怎么才能让button不能按呢,只需要一句话

self.codeButton.enabled = NO;

是不是方便很多