美文网首页iOS-虚心若愚,求知若饥iOS进阶指南iOS开发记录
改变Image颜色,取消导航条与view的分割线

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

作者: FMG | 来源:发表于2015-12-21 23:47 被阅读539次

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

    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;
                        }
                    }
                
                }
            }
        }
    
    

    希望对大家有用!!

    相关文章

      网友评论

        本文标题:改变Image颜色,取消导航条与view的分割线

        本文链接:https://www.haomeiwen.com/subject/akgmhttx.html