iPhone - NavigationBar自定义背景

int*_*ntl 11 navigation iphone sdk uinavigationcontroller

可能重复:
如何在iphone导航栏上添加背景图片?

我正在寻找一种方法来拥有一个自定义导航栏,并需要有一个自定义导航栏背景来实现这一目标.我正在四处寻找如何做到这一点,但无法找到解决方案.如果有人有解决方案,非常感谢帮助.

Mar*_*tin 14

从iOS5开始,您可以使用方法setBackgroundImage:forBarMetrics轻松设置自定义背景: 但您必须检查用户的手机是否具有正确的操作系统.

if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)])
{
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"texture.png"]
                                                  forBarMetrics:UIBarMetricsDefault];
}
Run Code Online (Sandbox Code Playgroud)

这是一个更好的解决方案,因为它在文档中.

  • 是的,但有一个检查.您可以在else子句中创建其他内容. (3认同)

Ada*_*dam 10

(安德鲁约翰逊回应的补充)

链接的Apple.com帖子包含3或4个不同的解决方案,其中大多数只有"一半"工作.我认为它们中最优雅/最有效的是这一个:

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

然而......将ObjC作为一个类别(应该是一个覆盖)并且它有自己的一些问题并不好.

因此,这里有一个更通用,更强大的解决方案:

http://samsoff.es/posts/customize-uikit-with-method-swizzling


And*_*son 6

您只需将一个子视图(UIImageView)添加到navaigationBar,它就是一个UIView子类.

UINavigationBar nb = [[UINavigationBar alloc]init];
[nb addSubview: foo];
[nb release];
Run Code Online (Sandbox Code Playgroud)

这是一篇论坛帖子,描述了如何将其包装到一个类别中:http://discussions.apple.com/thread.jspa?threadID = 1649012&tstart = 0