iOS-虚心若愚,求知若饥iOS进阶指南iOS开发记录

改变Image颜色,取消导航条与view的分割线

2015-12-21  本文已影响539人  FMG

给导航条设置背景图片就会取消它的半透明效果

UINavigationBar *navigationBar = self.navigationController.navigationBar;
    [navigationBar setBackgroundImage:[self image:[UIImage imageNamed:@"纯白"] withColor:[XNWGlobalColor navigationColor]]
                       forBarPosition:UIBarPositionAny
                           barMetrics:UIBarMetricsDefault];
    [navigationBar setShadowImage:[UIImage new]];

}

给Image着色,我这里的导航条颜色是不固定的,所以需要根据不同颜色生成跟导航条相同的颜色,以此来隐藏分割线

//改变图片颜色
- (UIImage *)image:(UIImage *)image withColor:(UIColor *)color
{
    CGRect rect = CGRectMake(0.0f, 0.0f, image.size.width, image.size.height);

    UIGraphicsBeginImageContextWithOptions(rect.size, NO, image.scale);
    CGContextRef context = UIGraphicsGetCurrentContext();
    [image drawInRect:rect];
    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextSetBlendMode(context, kCGBlendModeNormal);
    CGContextFillRect(context, rect);
    
    UIImage*newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

以上设置背景图片需要注意,如果使用的图片过大就会使得所有非继承UIScrollView的控制器向下偏移一定的位置,建议使用1px的图片进行平铺(没有验证是否可用)

还有一种隐藏导航条与View的分割线(实际就是一个图片),这种方式不会使别的控制器有偏移,并且可以保持导航条的半透明效果,看大家的需求了

if ([self.navigationController.navigationBar respondsToSelector:@selector( setBackgroundImage:forBarMetrics:)]){
        NSArray *list=self.navigationController.navigationBar.subviews;
        for (id obj in list) {
            if ([obj isKindOfClass:[UIImageView class]]) {
                UIImageView *imageView=(UIImageView *)obj;
                NSArray *list2=imageView.subviews;
                for (id obj2 in list2) {
                    if ([obj2 isKindOfClass:[UIImageView class]]) {
                        UIImageView *imageView2=(UIImageView *)obj2;
                        imageView2.hidden=YES;
                    }
                }
            
            }
        }
    }

希望对大家有用!!

上一篇下一篇

猜你喜欢

热点阅读