iOS导航栏背景透明渐变

重点分析:

1.隐藏导航的最下面的线。

2.设置导航背景的不透明度(ios7.0以上不用设置,translucent默认的就是Yes不用修改,但如果别人修改了或出现那种情况,需要设置为Yes)。

3.页面消失时导航恢复原样。

4.滚动时调用方法设置alpha来控制导航背景的渐变(也是核心,重点在这里)。

核心代码如下:

1.将颜色转换为图片

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

2.滚动时调用改变导航渐变

- (void)changeColor:(UIColor *)color withScrollView:(UIScrollView *)scrollView andValud:(CGFloat)value{
/**    if (scrollView.contentOffset.y < 0) { 慎重选择这个,只适用于固定的导航栏,如果是自定义view效果会不一样
        //下拉时导航隐藏
        self.hidden = YES;
    }else{
*/
        self.hidden = NO;
        //计算透明度
        CGFloat alpha = scrollView.contentOffset.y /value > 1.0f ? 1 : scrollView.contentOffset.y/value;
        //设置颜色改为图片
        UIImage *image = [self imageWithColor:[color colorWithAlphaComponent:alpha]];
        [self setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
        self.translucent = alpha >=1.0f ? NO : YES;
  /*  }*/
}

3.隐藏导航栏下的线

- (void)start{
    UIImageView *shawImage = [self findNavLineImageOn:self];
    shawImage.hidden = YES;
    self.translucent = YES;
}

4.页面消失后重置

(适用于导航栏不适用于自定义view)
UIImageView *shawImage = [self findNavLineImageOn:self];
 shawImage.hidden = NO;
  [self setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
  self.translucent = NO;

5.参考文章:https://www.jianshu.com/p/10c71cb19b5e 

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Menlo; color: #29a09f; background-color: #292b36 }

原文地址:https://www.cnblogs.com/TheYouth/p/9301725.html

时间: 2024-10-24 11:48:37

iOS导航栏背景透明渐变的相关文章

导航栏背景透明

////导航栏背景透明    [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];    //导航栏底部线清楚    self.navigationController.navigationBar.barStyle = UIBarStyleBlack;    self.navigationController.navigationB

自定义iOS导航栏背景,标题和返回按钮文字颜色-----转载自gyz413977349

在iOS7下,默认导航栏背景,颜色是这样的,接下来我们就进行自定义,如果你仅仅是更改一下背景和颜色,代码会很简单,不需要很复杂的自定义View来替代leftBarItem 更改导航栏的背景和文字Color 方法一: [objc] view plaincopy //set NavigationBar 背景颜色&title 颜色 [self.navigationController.navigationBar setBarTintColor:[UIColor colorWithRed:20/255.

iOS 导航栏 不透明

UINavigationBar.appearance().translucent = false UINavigationBar.appearance().barStyle = UIBarStyle.Default ps: Ios7禁止全局设置导航栏的透明状态

自定义iOS导航栏背景,标题和返回按钮文字颜色

一.导航栏的背景和文字Color: 方法一: //设置NavigationBar 背景颜色&title 颜色 [self.navigationController.navigationBar setBarTintColor:[UIColor colorWithRed:20/255.0 green:155/255.0 blue:213/255.0 alpha:1.0]]; [self.navigationController.navigationBar setTitleTextAttributes

ios 导航栏透明, 上下滑动 导航栏 颜色渐变

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #008400 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #3d1d81 } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400 } p.p4 {

IOS 实现自定义的导航栏背景以及自定义颜色的状态栏(支持7.0以及低版本)

为尊重文章原作者,转载务必注明原文地址:http://www.cnblogs.com/wt616/p/3784717.html 先看效果图: 在自定义导航栏背景时,可能会遇到以下一些问题: 1.当设置导航栏背景后,状态栏的颜色也会跟着一起改变掉,这可能不是你说希望看到的 2.IOS7以上的版本和低版本显示出来的导航栏高度位置有差别,这个差别就是状态栏的高度20,为了兼容低版本,必须统一 解决思路: 1.不正常的是状态栏的背景也一起变了,而状态栏的文字是可以通过其他API去设置的:如 [[UIAp

iOS 开发之 - iOS6适配 - 导航栏按钮透明方法

首先上张图: 1:ios6导航栏默认按钮 rightBarButtonItem   是不是很丑的赶脚? 现在通过以下方法来改变以下:code: UIButton *rightButton = [UIButton buttonWithType:UIButtonTypeCustom]; rightButton.frame = CGRectMake(0, 0, 40, 40); [rightButton setTitle:@"提交" forState:UIControlStateNormal

iOS导航栏-导航栏透明

设置一张透明图片:nav_bargound.png //导航栏背景    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"nav_bargound.png"] forBarMetrics:UIBarMetricsDefault];        //导航栏底部线    self.navigationController.navigationBar.shadowImage 

iOS 更改导航栏背景颜色

ios7以下的版本设置导航栏背景颜色可以使用 [[UINavigationBar appearance] setTintColor:[UIColor orangeColor]]; ios7以后: [[UINavigationBar appearance] setBarTintColor:[UIColor orangeColor]]; 默认带有一定透明效果,可以使用以下方法去除系统效果 [navigationController.navigationBar setTranslucent:NO];