本文章写来纪念我在做IOS项目时遇到的导航栏之坑。
为了方便调用,在自定义的NavigationController中添加属性:
#import <UIKit/UIKit.h>
@interface ETNavigationController : UINavigationController
@property(nonatomic, strong) UIColor* foregroundColor;
//带有alpha值的背景色
@property(nonatomic, strong) UIColor* backgroundColor;
@end
实现自定义访问器:
-(UIColor *)foregroundColor
{
return self.navigationBar.tintColor;
}
-(void)setForegroundColor:(UIColor *)foregroundColor
{
self.navigationBar.tintColor = foregroundColor;
}
-(void)setBackgroundColor:(UIColor *)backgroundColor
{
_backgroundColor = backgroundColor;
//这是一个自定义UIImage分类中通过颜色来生成图片的函数
UIImage* img = [UIImage imageWithColor:backgroundColor];
[self.navigationBar setBackgroundImage:img forBarMetrics:UIBarMetricsDefault];
CGFloat alpha;
[backgroundColor getRed:nil green:nil blue:nil alpha:&alpha];
BOOL translucent = (alpha < 1);
self.navigationBar.translucent = translucent;
}
到这已经可以满足设置一般的导航栏颜色的需求~~~,像QQ和淘宝那种下拉变换的导航栏目前没做研究。
还有一点小技巧
如果需要切换页面时对导航栏做(不透明<-->透明)变换,最好在变换的ViewController中做如下设置:
self.extendedLayoutIncludesOpaqueBars = YES;
这个属性,我理解的意思是”使用extendedLayout的情况下,在导航栏不透明时也要把视图延伸到navigationBar下方(将本控制器的view的顶点放在屏幕最上方)“,这样视图的顶部会被不透明的bar完全遮盖。这个理解有点片面,因为只考虑了顶部的navigationBar,实际上如果在底部有toolBar,视图也会延伸到toolBar的下面。
还有一个相关的属性:
edgesForExtendedLayout
它决定了视图布局时在哪些方向上面延伸,默认是所有方向都延伸。
网友评论