我一直在寻找一种方法来更改NavigationBar
的背景图片,并在用户浏览应用时控制NavigationBar
的外观。
据我所知,改变背景图片的方法是:
@implementation UINavigationBar (UINavigationBarCategory)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed: @"navbar.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
然而,这会改变整个应用中NavigationBar
的外观。当用户从一个视图导航到下一个视图时,如何更改NavBar
的背景图像?
提前感谢您的帮助!
答案 0 :(得分:2)
您需要在当前页面或当前适当的图像上设置一些状态,可能在您的每个viewWillAppear:
方法中。然后修改上面的drawRect:
函数以引用该状态。
要重新绘制条形,请在更新状态时调用[myNavigationBar setNeedsDisplay]
。这将导致drawRect
被调用。
答案 1 :(得分:1)
我真的建议您阅读Sebastian Celis的教程,这对我很有帮助 - http://sebastiancelis.com/2009/12/21/adding-background-image-uinavigationbar/
答案 2 :(得分:0)
是不是可以在导航栏上使用图像视图(添加)?
答案 3 :(得分:0)
我相信这是iOS5的第一个实际答案,主要问题是一旦完成背景图像的“删除”。好吧,只需保留现有图像,并在完成后将其放回原位。
@implementation MyViewController {
UIImage *_defaultImage;
}
- (void)viewWillAppear:(BOOL)animated {
_defaultImage = [self.navigationController.navigationBar backgroundImageForBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"bar.png"] forBarMetrics:UIBarMetricsDefault];
}
- (void)viewWillDisappear:(BOOL)animated {
[self.navigationController.navigationBar setBackgroundImage:_defaultImage forBarMetrics:UIBarMetricsDefault];
}
答案 4 :(得分:0)
您可以在应用程序的任何位置使用此代码(通过调用方法来调用viewWillAppeare中的方法)来更改导航栏图像。如果您在didFinishLanch中调用该方法,则意味着导航栏图像将设置为整个应用程序。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[UIDevice currentDevice] systemVersion];
if ([[[UIDevice currentDevice] systemVersion] floatValue] > 4.9)
{
[self customizeAppearance];
}
}
- (void)customizeAppearance
{
UIImage *navbarimage = [[UIImage imageNamed:@"blckapplication_bar.png"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0,0,0)];
[[UINavigationBar appearance] setBackgroundImage:navbarimage forBarMetrics:UIBarMetricsDefault];
// Create resizable images
// Set the background image for *all* UINavigationBars
}