iPhone导航栏图像

时间:2009-05-11 18:15:16

标签: iphone

我想用自定义图片替换iPhone应用程序中的后退按钮和整个导航栏。首先,这可能吗?第二,如果是这样,怎么样?感谢。

3 个答案:

答案 0 :(得分:17)

此代码将修改您应用中的每个UINavigationBar。

@implementation UINavigationBar (CustomImage)
- (void)drawRect:(CGRect)rect {
    UIImage *image = [UIImage imageNamed: @"MyNavigationBar.png"];
    [image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end

答案 1 :(得分:0)

您将无法轻松覆盖Apple导航栏的外观,即使您能够,也很有可能违反其避免私有API的政策。但是,使用所有自定义图像创建自己的外观相似的导航栏非常简单。这对于需要导航栏的简单一次性屏幕很有用,但是在基于UINavigationController的复杂层次结构上实现它将是一种野兽。

修改:看起来人们可以通过覆盖-drawRect选择器来更改背景:Custom background for UINavigationBar? 。我没有看到任何关于这些更改是否已获得App Store批准的报告。

答案 2 :(得分:0)

您可以使用此代码将导航栏图像和标签栏图像更改为自定义图像:

   if([[UINavigationBar class] respondsToSelector:@selector(appearance)])  {//iOS >=5.0
    UIImage *image = [UIImage imageNamed:@"myCustomImage.png"];

    CGSize newSize = CGSizeMake(self.navigationController.navigationBar.frame.size.width, self.navigationController.navigationBar.frame.size.height);
    UIGraphicsBeginImageContext(newSize);
    [image drawInRect: CGRectMake(0, 0, self.navigationController.navigationBar.frame.size.width, self.navigationController.navigationBar.frame.size.height)];


    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    [self.navigationController.navigationBar   setBackgroundImage:newImage  forBarMetrics:UIBarMetricsDefault];

    [[UIToolbar appearance] setBackgroundImage:newImage forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];
    [[UITabBar appearance] setBackgroundImage:newImage];
    [[UITabBar appearance] setSelectedImageTintColor:[UIColor cyanColor]];
}