【发布时间】:2011-05-18 04:11:19
【问题描述】:
我想将 UINavigationBar 的背景更改为 [UIColor colorWithImage:],但它不起作用。我错过了什么?
编辑:
创建子类后,在哪里设置 UINavigationController 以使用它?
【问题讨论】:
标签: iphone ios uinavigationbar tabbar
我想将 UINavigationBar 的背景更改为 [UIColor colorWithImage:],但它不起作用。我错过了什么?
编辑:
创建子类后,在哪里设置 UINavigationController 以使用它?
【问题讨论】:
标签: iphone ios uinavigationbar tabbar
您可以使用tintColor 属性来更改UINavigationBar 的颜色,但是要将图像设置为背景,您必须提供自己的UINavigationBar 子类并覆盖drawRect: 方法,例如:
- (void)drawRect:(CGRect)rect {
// Drawing code
UIImage *img = [UIImage imageNamed: @"background-image.png"];
[img drawInRect:CGRectMake(0,
0,
self.frame.size.width,
self.frame.size.height)];
}
如果您使用 Interface Builder 构建您的 UI,然后使用自定义导航栏,只需在 Interface Builder 中选择 UINavigationBar 元素,打开 Inspector 并在 Identity 选项卡中的类字段中指定您的 UINavigationBar 子类,如下所示:
【讨论】:
setNavigationBar: 方法,该方法有效,但可能会导致您的应用被 App Store 拒绝。您可以使用 Denis Hennessy 的类别解决方案(此处的其他答案之一)纯粹在代码中实现此目的。 This SO question 有其他建议。
要在导航栏中显示图像,您必须自己绘制它,这实际上并不难。将其另存为UINavigationBar+CustomBackground.m(它向 UINavigationBar 添加了一个自定义类别):
@implementation UINavigationBar (CustomBackground)
- (void)drawRect:(CGRect)rect {
UIImage *image = [UIImage imageNamed:@"NavMain.png"];
[image drawInRect:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
}
@end
【讨论】: