参考了网上一些朋友的代码,发现有些不是太靠谱,比较了一下 发现下面这段才是最合适的:
CumstomNavigationBar.h:
@interface UINavigationBar (UINavigationBarCategory)
@end
CumstomNavigationBar.m:
#import "CumstomNavigationBar.h"
@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @"yourImage.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
网上还有一种方法是在Bar的基础上添加子View,这种方法会有点bug,代码如下
#import "CumstomNavigationBar.h"
@implementation UINavigationBar (UINavigationBarCategory)
-(void)setBackgroundImage:(UIImage*)image
{
if(image == nil)
{
[backgroundView removeFromSuperview];
}
else
{
backgroundView = [[UIImageView alloc] initWithImage:image];
backgroundView.frame = CGRectMake(0.f, 0.f, self.frame.size.width, self.frame.size.height);
backgroundView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self addSubview:backgroundView];
[self sendSubviewToBack:backgroundView];
[backgroundView release];
}
}
//for other views
- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index
{
[super insertSubview:view atIndex:index];
[self sendSubviewToBack:backgroundView];
}
@end
这段代码在执行导航的时候NavigationBar上的button会被backgroundView覆盖掉,导致button不显示,但却可以导航的BUG.