iOS導航欄漸變NavigationController

工作中的一些代碼記錄

導航欄顏色漸變示例:
顏色漸變.gif
//核心代碼
//添加背景view
self.navView = [[UIView alloc] initWithFrame:CGRectMake(0, -20, WYScreenW, 64)];
self.navViewColor = WYRGBColorAlpha(74, 159, 242, 0);
self.navView.backgroundColor = self.navViewColor;
[self.navigationController.navigationBar addSubview:self.navView];

//滑動監聽
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    CGFloat offset_Y = scrollView.contentOffset.y;
    CGFloat alpha = offset_Y / 116.0f;
    if (alpha >= 0.1) {
        self.titleLabel.hidden = NO;
    }else{
        self.titleLabel.hidden = YES;
    }
    self.navView.backgroundColor = [self.navViewColor colorWithAlphaComponent:alpha];
}
導航欄頂部隱藏和顯示:
顏色漸變.gif
//滑動監聽
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    CGFloat offset_Y = scrollView.contentOffset.y;
    if(offset_Y > -60)
    {
        [self.navigationController setNavigationBarHidden:YES animated:YES];
    }else{
        [self.navigationController setNavigationBarHidden:NO animated:YES];
    }
}
導航欄上拉、下拉 隱藏和顯示:
顏色漸變.gif
self.automaticallyAdjustsScrollViewInsets = NO;
    self.tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 20, self.view.bounds.size.width, self.view.bounds.size.height)];
    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    self.tableView.backgroundColor = WYGlobalBg;
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellID];
    [self.view addSubview:self.tableView];
    
    if([self respondsToSelector:@selector(automaticallyAdjustsScrollViewInsets)])
    {
        self.automaticallyAdjustsScrollViewInsets = NO;
        UIEdgeInsets insets = self.tableView.contentInset;
        insets.top =self.navigationController.navigationBar.bounds.size.height;
        self.tableView.contentInset =insets;
        self.tableView.scrollIndicatorInsets = insets;
    }

-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
    if(velocity.y>=0)
    {
        [self.navigationController setNavigationBarHidden:YES animated:YES];
    }else
    {
        [self.navigationController setNavigationBarHidden:NO animated:YES];
    }
}

navigationController

先前的外包瞎亂寫,造成一系列接手后的屎坑,這里記錄下修改的UInavigation代碼

創建,銷毀的時候使用系統的navigationController
-(void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [[self navigationController] setNavigationBarHidden:NO animated:YES];
}

-(void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [[self navigationController] setNavigationBarHidden:YES animated:YES];
}
設置導航欄為透明色
    [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
    self.navigationController.navigationBar.shadowImage = [UIImage new];
    self.navigationController.navigationBar.translucent = YES;
左右側按鈕
    //隱藏原生返回按鈕
    self.navigationItem.hidesBackButton = YES;
    UIButton *backButton = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 30, 30)];
    //按鈕偏移
    backButton.contentEdgeInsets = UIEdgeInsetsMake(0, -20, 0, 0);
    [backButton setImage:[UIImage imageNamed:@"back_black"] forState:UIControlStateNormal];
    [backButton addTarget:self action:@selector(clickLeftBtn) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *leftItem = [[UIBarButtonItem alloc] initWithCustomView: backButton];
    self.navigationItem.leftBarButtonItem = leftItem;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容