IPhone - NavigationBar Пользовательский фон
Возможный дубликат:
Как добавить фоновое изображение на панель навигации iphone?
Я ищу способ создать настраиваемую панель навигации и для этого нужно иметь собственный экран навигационной панели. Я искал, как это сделать, но не смог найти решение. Если у кого-то есть решение, помощь очень ценится.
Ответы
Ответ 1
Вы можете просто добавить subview (UIImageView) в navaigationBar, который является только подклассом UIView.
UINavigationBar nb = [[UINavigationBar alloc]init];
[nb addSubview: foo];
[nb release];
Вот сообщение на форуме, в котором описывается, как превратить это в категорию: http://discussions.apple.com/thread.jspa?threadID=1649012&tstart=0
Ответ 2
С iOS5 вы можете легко установить собственный фон, используя метод setBackgroundImage: forBarMetrics:
Но вы должны проверить, имеет ли пользовательский телефон правильную ОС.
if ([self.navigationController.navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)])
{
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"texture.png"]
forBarMetrics:UIBarMetricsDefault];
}
Это более приятное решение, вызвавшее его в документе.
Ответ 3
(дополняющий ответ Эндрю Джонсона)
Связанная почта 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
ОДНАКО... это не хорошая практика ObjC to od, что в качестве категории (должно быть переопределение), и у нее есть свои проблемы.
Итак, более общее и мощное решение здесь:
http://samsoff.es/posts/customize-uikit-with-method-swizzling
Ответ 4
Скопируйте это в viewDidLoad. Он будет проверять iOS 5 и использовать предпочтительный метод, в противном случае он добавит subview в версии navBar для iOS, 5.0. Это будет работать при условии, что ваше пользовательское фоновое изображение не имеет прозрачных пленок.
float version = [[[UIDevice currentDevice] systemVersion] floatValue];
NSLog(@"%f",version);
UIImage *backgroundImage = [UIImage imageNamed:@"myBackgroundImage.png"];
if (version >= 5.0) {
[self.navigationController.navigationBar setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];
}
else
{
[self.navigationController.navigationBar insertSubview:[[[UIImageView alloc] initWithImage:backgroundImage] autorelease] atIndex:1];
}