Подтвердить что ты не робот

IPhone - NavigationBar Пользовательский фон

Возможный дубликат:
Как добавить фоновое изображение на панель навигации iphone?

Я ищу способ создать настраиваемую панель навигации и для этого нужно иметь собственный экран навигационной панели. Я искал, как это сделать, но не смог найти решение. Если у кого-то есть решение, помощь очень ценится.

4b9b3361

Ответ 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];
}