Могу ли я установить изображение в качестве заголовка для UINavigationBar? - PullRequest
66 голосов
/ 14 ноября 2008

Можно ли установить какое-либо изображение в качестве заголовка панели навигации?

Я думаю, что приложение NYTimes использовало панель навигации, и заголовок выглядит как файл изображения (причина, по которой он кажется UINavigationBar, в том, что они используют правую кнопку для поиска).

Ответы [ 16 ]

0 голосов
/ 11 сентября 2012

В MonoTouch вы можете использовать это:

 this.NavigationItem.TitleView = myImageView;
0 голосов
/ 22 августа 2012

В ios5.0 добавлено множество функций для настройки внешнего вида стандартных элементов. Если вы не хотите использовать ImageView для заголовка, альтернативой может быть настройка внешнего вида всех панелей UINav с использованием фонового изображения и собственного шрифта / цвета.

- (void) customiseMyNav
{
    // Create resizable images
    UIImage *portraitImage = [[UIImage imageNamed:@"nav_bar_bg_portrait"] 
        resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];
    UIImage *landscapeImage = [[UIImage imageNamed:@"nav_bar_bg_landscape"] 
        resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0, 0, 0)];

    // Set the background image
    [[UINavigationBar appearance]  setBackgroundImage:portraitImage forBarMetrics:UIBarMetricsDefault];
    [[UINavigationBar appearance]  setBackgroundImage:landscapeImage forBarMetrics:UIBarMetricsLandscapePhone];

    // set the title appearance
    [[UINavigationBar appearance] setTitleTextAttributes:
        [NSDictionary dictionaryWithObjectsAndKeys:
            [UIColor colorWithRed:50.0/255.0 green:150.0/255.0 blue:100/255.0 alpha:1.0], 
            UITextAttributeTextColor, 
            [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.6], 
            UITextAttributeTextShadowColor, 
            [NSValue valueWithUIOffset:UIOffsetMake(0, -1)], 
            UITextAttributeTextShadowOffset, 
            [UIFont fontWithName:@"Arial-Bold" size:0.0], 
            UITextAttributeFont, 
            nil]];
}
0 голосов
/ 16 ноября 2011

Если ваши кнопки исчезают, когда вы перемещаетесь назад и вперед по навигации, это исправило это для меня:

NSArray *mySubviews = navigationBar.subviews;
UIImageView *iv = nil;

// Move in reverse direction as not to upset the order of elements in the array
for (int i = [mySubviews count] - 1; i >= 0; i--)
{
    if ([[mySubviews objectAtIndex:i] isMemberOfClass:[UIImageView class]])
    {
        NSLog(@"found background at index %d",i);
        iv = [mySubviews objectAtIndex:i];
        [[mySubviews objectAtIndex:i] removeFromSuperview];
        [navigationBar insertSubview:iv atIndex:0];
    }
}
0 голосов
/ 12 сентября 2011

Ниже описано, как это сделать в MonoTouch (Xamarin's) с C # .NET

.

Создайте UIViewConvrtoller, который находится в NavigationController, затем вызовите его в любое время:

someNiceViewControllerYouMade.NavigationController.NavigationBar
     .InsertSubview(new UIImageView
     (MediaProvider.GetImage(ImageGeneral.navBar_667x44)),0);

Примечание. MediaProvider - это просто класс, извлекающий изображения.

Этот пример позволяет представлению заполнять всю панель навигации, а также позволяет отображать текст заголовка элемента.

0 голосов
/ 03 ноября 2010

Я изменил код UINavigationBar + CustomImage для правильной работы без утечки памяти.

- (void)setBackgroundImage:(UIImage *)image
{
    if (! image) return;
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    imageView.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
    [self addSubview:imageView];
    [imageView release];
}

- (void) clearBackgroundImage
{
    // This runs on a separate thread, so give it it's own pool
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSArray *mySubviews = self.subviews;

    // Move in reverse direction as not to upset the order of elements in the array
    for (int i = [mySubviews count] - 1; i >= 0; i--)
    {
        if ([[mySubviews objectAtIndex:i] isMemberOfClass:[UIImageView class]])
        {
            [[mySubviews objectAtIndex:i] removeFromSuperview];
        }
    }

    [pool release];
}
0 голосов
/ 25 февраля 2010

Просто используйте

[navController.navigationBar insertSubview:myImage atIndex:0] ;

, где myImage имеет тип UIImageView и navController имеет тип UINavigationController

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...