0

기본 배경 이미지와 배경색이 다른 사용자 지정 UINavigationBar가 있습니다. 정상적으로 표시되지만 앱간에 앞뒤로 이동하자 마자 탐색 표시 줄의 배경 이미지와 버튼이 위로 올라갑니다.앱이 활성화되면 UINavigationBar가 위로 올라갑니다.

UINavigationBar는 펜촉에서 만든 이미지를 추가 할 기본 구현을 재정의하는 사용자 정의 클래스가된다 막대가 제대로 표시되지 않는이 시점에서

@implementation MyUINavigationBar 


- (void)drawRect:(CGRect)rect { 
    UIImage *image = [UIImage imageNamed: @"nav.png"]; 
    rect.size.height = 60; 
    [image drawInRect:rect]; 
} 


@end 

합니다. 내 응용 프로그램 위임의 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions에서이 코드와 함께이 문제를 해결 : 이제 모든 것이 제대로 나타

self.navigationController.view.frame = CGRectMake(0, 20, 320, 460); 
self.navigationController.navigationBar.frame = CGRectMake(0, 0, 320, 60); 

. 다른 앱으로 전환하고 다시 돌아 가면 프레임이 적용되지 않은 것처럼 막대가 위로 이동합니다. 이 문제는 앱으로 다시 전환 한 직후에 발생합니다.

아래에는 두 개의 스크린 샷이 나와 있습니다. 첫 번째 버전은 올바른 버전을 표시하고 다른 버전은 잘못된 버전을 표시합니다.

어떤 일이 벌어 질지 궁금하십니까? viewWillAppear 및 활성 뷰의 viewDidAppear 또는 app delegate의 applicationDidBecomeActive에 새 프레임을 적용 해봤지만 도움이되지 않았습니다.

https://skitch.com/instromaniac/rtagr/ios-simulator https://skitch.com/instromaniac/rtaf9/view-not-ok

+0

난 그냥이 같은 유사한 문제가 있습니다. 그것은 나를 좌절시킵니다. 대답을 찾으면 알려 드리겠습니다. 내 질문 : http://stackoverflow.com/questions/6361354/uinavigationbar-with-custom-background-shifted-to-the-top-covered-by-the-status-b –

답변

0

으로 탐색 컨트롤러의 뷰의 프레임을 변경해

self.navigationController.view.frame = CGRectMake (0,0,320,480);

희망이 여기에, 나는이 문제를 알아 내기 위해 일을 보냈다

+0

감사하지만 그 탐색 표시 줄을 밀어 것 같다 및 그 내용을 위로 : https://skitch.com/instromaniac/rt6yp/ios-simulator – klaasvw

1

하는 데 도움이 정말 완전한 사용자 정의에서는 backButton 작동 트릭입니다.

backBarButtonItem은 iOS SDK (알고있는 한 4.3까지)에 완전히 잠겨 있으므로 일반 뒤로 버튼 대신이 작업을 수행하는 leftBarButtonItem을 사용해야합니다.

UINavigationController의 루트보기 컨트롤러에서 backBarButtonItem을 정의해야하지만, 하위보기 (예 : 내보기에서는 nextViewController)에서 가짜 BackButton을 설정해야합니다.

이 코드는 여기에 맞게 프레임으로 재생 (A 70 픽셀 사용자 지정 UINavigationBar에 우리의 가짜 뒤로 버튼을 표시하기위한 GRAAL가 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

[[self navigationController] pushViewController:nextViewController animated:YES]; 

에서, (A UITableViewDelegate입니다) 내 루트보기 컨트롤러에 사용자의 필요) :

-(void)handleBack:(id)sender { 
    // Simulate the original back button 
    [self.navigationController popViewControllerAnimated:YES];  
} 

-(void)viewWillAppear:(BOOL)animated { 

    // Making a custom button 
    UIButton *backBtn = [UIButton buttonWithType:UIButtonTypeCustom];  
    [backBtn setImage:[UIImage imageNamed:@"back-button.png"] forState:UIControlStateNormal];  
    [backBtn setImage:[UIImage imageNamed:@"back-button-hover.png"] forState:UIControlStateHighlighted];  
    [backBtn setImage:[UIImage imageNamed:@"back-button-disabled.png"] forState:UIControlStateDisabled];  
    [backBtn setFrame:CGRectMake(6, 4, 60, 30)]; 

    // Binding custom target & action to the button 
    [backBtn addTarget:self action:@selector(handleBack:) forControlEvents:UIControlEventTouchUpInside]; 

    // Nesting the button in a UIView to position the button anywhere! 
    UIView *backView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 60, 70)]; 
    [backView addSubview:backBtn]; 

    // Nesting all of these into a UIBarButtonItem 
    UIBarButtonItem *backItem = [[UIBarButtonItem alloc] initWithCustomView:backView]; 

    // Overwrite original backbutton (self.navigationItem.backBarButtonItem DO NOT WORK HERE 
    self.navigationItem.leftBarButtonItem = backItem; 

    // Memory clean up 
    [backItem release]; 
    [backView release];   

} 

재미 있으은)

관련 문제