关于导航条渐变类型的处理以及注意事项
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];
}