博客> ios 简单实现导航栏渐变效果
ios 简单实现导航栏渐变效果
2017-07-22 22:23 评论:0 阅读:51 飞翔信念
ios 导航栏 导航栏渐变 渐变

之前一直是用自定义的导航栏渐变,近段又要写个导航栏渐变,发现一个简单的实现,简单记录下,直接上代码

1.首先在viewwillappear方法里实现隐藏导航栏底部黑线等操作

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    //self.tabBarController.tabBar.hidden=NO;
    self.navigationController.navigationBar.barStyle = UIBarStyleBlack;//导航栏的背景色是黑色, 字体为白色
    [self.navigationController.navigationBar setShadowImage:[UIImage new]];//用于去除导航栏的底线,也就是周围的边线
    //[searchBar resignFirstResponder];

    //isShoperDetail=NO;
    isOver=NO;
}

2.在viewWillDisappear方法里还原导航,(如果下个界面不要求透明)

-(void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    [[[self.navigationController.navigationBar subviews] objectAtIndex:0] setAlpha:1];
    isOver=YES;
}

3.接下来在tableview的滑动事件里控制透明度渐变(isShoperDetail可忽略)

//导航栏渐变颜色
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    //if (isShoperDetail==NO) {

        if (isOver) {
            [[[self.navigationController.navigationBar subviews] objectAtIndex:0] setAlpha:1];
            return;
        }
        CGFloat offsetY = scrollView.contentOffset.y;
        if (offsetY >=  0) {

            CGFloat alpha = offsetY/80;
            [[[self.navigationController.navigationBar subviews] objectAtIndex:0] setAlpha:alpha];

        } else {

            [[[self.navigationController.navigationBar subviews] objectAtIndex:0] setAlpha:0];

        }

    //}

}

4.大家可以发现有个isOver,这是一个我定义的bool变量,因为我发现在viewWillDisappear里设置还原并不管用,跳出界面后还会调用scrollViewDidScroll:方法,所以定义了个全局的isOver控制,这样在跳转到下个界面的时候导航栏就不是透明的了
收藏
0
sina weixin mail 回到顶部