2010-12-13 9 views
0

내비게이션 막대의 배경 이미지를 넣으 려합니다. 다음 코드를 시도했지만 탐색 제목을 숨 깁니다.탐색 표시 줄에 배경 이미지 넣는 방법?

self.title = @"My title"; 
UINavigationBar *navBar = self.navigationController.navigationBar; 
UIImageView *image = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"top.png"]]; 
[navBar addSubview:image]; 
[navBar sendSubviewToBack:image]; 

모든 친구는 왜 그런지 알고 있습니다.

+2

가능한 중복 http://stackoverflow.com/questions/4319112/how-do-i-change-the-uinavigationbar) –

+0

@middaparka 가능할 수도 있지만 완전히는 아닐 수도 있습니다. 내 대답을 확인하고 생각해보십시오. –

답변

3
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"background.png"] forBarMetrics:UIBarMetricsDefault]; 
[I가 UINavigationBar의 배경을 변경하려면 어떻게합니까?] (의
0

당신은 또한 변화를 얻을 것이다 앱에서 플레이어 탐색 모음을 영화를 재생하는 경우 WaiLam에 의해

@implementation UINavigationBar (TENavigationBar) 

- (void) drawRect:(CGRect)rect 
{ 
    UIImage *image = [UIImage imageNamed:@"navigation_background"]; 

    [image drawInRect:CGRectMake(0, 
           0, 
           self.frame.size.width, 
           self.frame.size.height)]; 
} 

@end 
0

솔루션이 작동하지만 것의 drawRect 방법을 우선하여 수행 할 수 있습니다. 더 나은 접근법입니다 -

@implementation UINavigationBar (UINavigationBarCategory) 

- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx 
{ 
    if([self isMemberOfClass:[UINavigationBar class]]) 
    { 
     UIImage *image; 
     image=[UIImage imageNamed:@"hor_bar"]; 
     CGContextClip(ctx); 
     CGContextTranslateCTM(ctx, 0, image.size.height); 
     CGContextScaleCTM(ctx, 1.0, -1.0); 
     CGContextDrawImage(ctx, 
          CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), image.CGImage); 
    } 
    else 
    {   
     [super drawLayer:layer inContext:ctx];  
    } 
} 
@end 
0

올바른 크기로 이미지를 가운데에 맞춰 NavigationBar에 추가합니다.

/* custom navbar logo, centered with same height as navbar */ 
UIImageView *logo = [[UIImageView alloc] initWithFrame: 
     CGRectMake(self.navigationController.navigationBar.frame.size.width/2-75,0,150, 
        self.navigationController.navigationBar.frame.size.height-1)]; 
[logo setImage:[UIImage imageNamed:@"text_logo.png"]]; 
[self.navigationController.navigationBar addSubview:logo]; 
[self.navigationController.navigationBar sendSubviewToBack:logo]; 
0

항상이 사용하는 것보다 응용 프로그램 전반에 걸쳐 동일 있도록 이미지를 추가하려면 : 당신이 그것을보다 단지 특정 화면에서 이미지를 설정하려면, 그렇지 않으면

- (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)]; 
} 

을 조금 까다 롭습니다.

- (void) viewWillAppear{ 
    ... 
    ... 
    [self addNavigationBarImage:YES]; 
} 

- (void) viewWillDisappear{ 
    ... 
    ... 
    [self addTheNavigationBarImage:NO]; 
} 

- (void) addTheNavigationBarImage:(BOOL)add{ 
    UIImageView *imgView = (UIImageView *)[[self.navigationController navigationBar] viewWithTag:TAG]; 
    if(add){ 
    if(imgView == nil){ 
     imgView = [[[UIImageView alloc] initWithImage:IMAGE] autorelease]; 
     [self.navigationController.navigationBar insertSubview:imgView atIndex:0]; 
    } 
    //EDIT: 
    else{ 
     [self.navigationController.navigationBar sendSubviewToBack:imgView]; 
    } 

    } 
    else{ 
    if(imgView) 
     [imgView removeFromSuperview]; 
    } 
} 

희망이 있습니다. 네비게이션 컨트롤러가 초기화

+0

내 질문에 답변 해 주셔서 감사합니다. 하지만이 코드에서 몇 가지 문제가 있습니다. UIImageView * imgView = [self.navigationController.navigationBar viewWithTag : TAG]; 내비게이션 막대 또는 이미지보기를 설정할 태그가있는 태그 위치. 탐색 모음의 태그를 설정 한 다음 여기에서 사용했지만 경고를 표시합니다. –

+0

@Viral \ Narshana : TAG 대신 고유 한 정수를 사용해야합니다. 아아, 유감스럽게도 다음과 같은 뷰를 형변환해야합니다. UIImageView * imgView = (UIImageView *) [[self.navigationController navigationBar] viewWithTag : 1001] –

+0

답변을 얻었지만 하나의 문제는 이미지 숨기기 제목과 탐색 모음의 버튼입니다. 코드가 작동하지 않습니다. [self.navigationController.navigationBar sendSubviewToBack : imageView]; 이것에 대한 어떤 생각? –

3

이 가야, 즉 MainViewController.m

// Set the background image of the navigation bar 
UIImage *image = [UIImage imageNamed:@"banner-with-logo.png"]; 
[self.navigationBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault]; 
관련 문제