我想为我的 iphone 应用程序的导航栏设置图像背景。大多数解决方案建议在以下类别中使用 drawRect:
@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
但是,苹果不推荐这个 .还有什么建议吗?
感谢您的帮助,
斯蒂芬妮
最佳答案
Apple 强烈建议我们使用子类而不是类别(WWDC 2011,Session 123)。
创建一个实现 drawRect:
的子类方法并将导航栏的类设置为您的自定义类:
运行时的类切换:
#import <objc/runtime.h>
...
object_setClass(theNavController.navigationBar, [CustomNavigationBar class]);
您还应该避免使用
[UIImage imageNamed:...]
每次在 drawRect:
因为它可能会影响性能(对于动画)。将其缓存在 ivar 中: if (!bgImage) {
bgImage = [[UIImage imageNamed:@"NavigationBar.png"] retain];
}
[bgImage drawInRect:...];
(并在 dealloc 中释放它)
注:由于 iOS 5 仍处于保密协议(protocol)下,我无法提及如何轻松添加背景图像。查看 UINavigationBar 的文档。
关于iphone - 如何在不使用 drawRect 类别的情况下将图像设置为导航栏背景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7348742/