iOS导航栏背景颜色,背景图片,标题字体颜色大小,透明度渐变,去除导航栏下划线

一.导航栏

通常对导航栏的要求是:背景颜色,左右按钮颜色,标题字体颜色及大小。

再多一点要求:设置图片导航栏,设置导航栏渐变

还有一点就是去除导航栏下的一条细线

设置背景颜色:

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

设置左右按钮颜色:

self.navigationController.navigationBar.tintColor = [UIColor darkGrayColor];

设置标题字体颜色及大小:

[self.navigationController.navigationBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor orangeColor],NSFontAttributeName:[UIFont systemFontOfSize:20]}];

设置图片导航栏:

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

但图片一般来讲需要进行剪裁至适合导航栏大小附带上图片剪裁的方法:

//简单粗暴地图片裁剪方法 裁剪出的图片尺寸按照size的尺寸,但图片可能会被拉伸
- (UIImage *)getNvaImageWithImage:(UIImage *)image{
    CGSize imageSize = CGSizeMake(self.view.frame.size.width, kNavBarHeaderHeight);
    UIGraphicsBeginImageContext(imageSize);
    [image drawInRect:CGRectMake(0, 0, imageSize.width, imageSize.height)];
    UIImage * newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

这里的kNavBarHeaderHeight为宏定义,用来区分iPhone X和其它机型的导航栏 可以用作iPhone X项目适配

///导航栏高度
#define kNavBarHeaderHeight ([UIScreen mainScreen].bounds.size.height == 812 ? 88 : 64)
///iphone底部高度
#define kiPhoneFooterHeight ([UIScreen mainScreen].bounds.size.height == 812 ? 34 : 0)

导航栏渐变我利用的是

[self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];

方法来实现的

然后图片是根据颜色值生成的

核心代码:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    //计算透明度
    CGFloat alpha = scrollView.contentOffset.y/90.0f >1.0f ? 1:scrollView.contentOffset.y/90.0f;
    //将颜色转换为图片
    UIImage *image = [self imageWithColor:[UIColor colorWithRed:0.094 green:0.514 blue:0.192 alpha:alpha]];
    [self.navigationController.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
}

遵循UIScrollViewDelegate代理,在滑动的方法里进行透明的计算,同时动态地给导航栏设置背景图片。

颜色转图片的方法:

- (UIImage *)imageWithColor:(UIColor *)color{
    //创建1像素区域并开始图片绘制
    CGRect rect = CGRectMake(0, 0, 1, 1);
    UIGraphicsBeginImageContext(rect.size);
    //创建画板并填充颜色和区域
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextFillRect(context, rect);
    //从画板上获取图片并关闭图片绘图
    UIImage * image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

去除导航栏下划线:

[self.navigationController.navigationBar setShadowImage:[UIImage new]];

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值