为什么要自定义 UINavigationBar,为了不要显示系统的空间,按着自己的意愿来
一般一个应用程序中的UINavigationBar都是用的统一风格的,那么我们就在入口来中用类别的方法来给UINavigationBar设置样式
@interface UINavigationBar (CustomImage)
@end
@implementation UINavigationBar (CustomImage)
// 压缩图片
- (UIImage *) scaleImage:(UIImage *)image {
UIGraphicsBeginImageContext(CGSizeMake(320,44));
[image drawInRect:CGRectMake(0, 0, 320, 44)];
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}
//ios5之前的走这里
- (void)drawRect:(CGRect)rect {
UIImage *image = [self scaleImage:[UIImage imageNamed:@"top_bg.png"]];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
// ios5后走这里
- (void)didMoveToSuperview
{
// 来判断版本
if ([[UIDevice currentDevice].systemVersion floatValue]>=7.0) {
if ([self respondsToSelector:@selector(setBackgroundImage:forBarPosition:barMetrics:)])
{
[self setBackgroundImage:[UIImage imageNamed:@"top_bg.png"] forBarPosition:UIBarPositionTop barMetrics:UIBarMetricsDefault];
}
}else{
if ([self respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)])
{
[self setBackgroundImage:[self scaleImage:[UIImage imageNamed:@"top_bg.png"]] forBarMetrics:UIBarMetricsDefault];
}
}
}
@end
这样就完成了兼容IOS4以上的所有设备