关于导航条渐变类型的处理以及注意事项

2018-01-06  本文已影响16人  9d8c8692519b

一个导航条透明度渐变的问题, 很有意思。

效果如下:导航条渐变.gif


导航条渐变.gif

一、 关于导航条渐变的实现

各位可以直接参考 MXNavigationBarManager的实现。

大致思路:
通过页面滚动的动态y值,改变Alpha。
导航条的背景图,通过指定颜色来生成一个image贴上即可。

二、 如果定制了UINavigationController类

如果你定制了类UINavigationController,那么在实现导航条渐变的情况下。如果导航条需要渐变为透明,那么请注意:检查下你是否使用了下面这句代码,它会影响导航条透明的实现。(setTranslucent:)

[self.navigationBar setTranslucent:NO];

三、可以通过定制系统的UINavigationController类定制返回按钮的图标,等信息

比如:如下信息,通过push页面的时候,根据不同的控制器名称()替换下返回按钮的图标。

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated {
    
    if (self.childViewControllers.count > 0) { // 如果push进来的不是第一个控制器
        viewController.hidesBottomBarWhenPushed = YES;
    }
    
//    // 类名
//    const char *className = [@"PAlbumDetailViewController" cStringUsingEncoding:NSASCIIStringEncoding];
//    // 从一个字串返回一个类
//    Class newClass = objc_getClass(className);
    
    [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[[UIImage alloc]init]];
    [[UINavigationBar appearance] setBackIndicatorImage:[[UIImage alloc]init]];
    [[UIBarButtonItem appearance] setBackButtonBackgroundVerticalPositionAdjustment:0.0 forBarMetrics:UIBarMetricsDefault];
    
    viewController.navigationItem.backBarButtonItem  = [[UIBarButtonItem alloc]initWithTitle:@" " style:UIBarButtonItemStylePlain target:self action:nil];
    
    if ([[viewController class] isEqual: objc_getClass([@"PAlbumDetailViewController" cStringUsingEncoding:NSASCIIStringEncoding])]) {
        [[UIBarButtonItem appearance] setBackButtonBackgroundImage:[UIImage imageNamed:@"backButton.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    }else {
        [[UIBarButtonItem appearance] setBackButtonBackgroundImage:[UIImage imageNamed:@"back_HK"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    }

    [super pushViewController:viewController animated:animated];
    
}
上一篇 下一篇

猜你喜欢

热点阅读