2010-07-11 2 views
8

http://www.irovr.com/stackOverflow/overlap.png내 탐색 바가 내 상태 표시 줄 아래에있는 이유는 무엇입니까? 이 상태 표시 줄 아래에 그려지고, 그래서

- (void)viewDidLoad { 
     [super viewDidLoad]; 
     [self setWantsFullScreenLayout:YES]; 
     [mainScrollView addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onMainScrollTap:)]]; 
    } 

- (void)onMainScrollTap:(id)sender { 
    if(self.navigationController.navigationBar.hidden){ 
     [self.navigationController setNavigationBarHidden:NO animated:YES]; 
     [self.navigationController setToolbarHidden:NO animated:NO]; 
     [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade]; 
    }else{ 
     [self.navigationController setNavigationBarHidden:YES animated:YES]; 
     [self.navigationController setToolbarHidden:YES animated:YES]; 
     [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 
    } 
} 

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent]; 
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade]; 

    self.navigationController.navigationBar.translucent = YES; 
    self.navigationController.toolbar.translucent = YES; 
} 

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 
    [self.navigationController setNavigationBarHidden:YES animated:YES]; 
    [self.navigationController setToolbarHidden:YES animated:YES]; 
} 

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault]; 
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade]; 
    self.navigationController.navigationBar.translucent = NO; 
    self.navigationController.toolbar.translucent = NO; 
    [self.navigationController setNavigationBarHidden:NO animated:YES]; 
    [self.navigationController setToolbarHidden:YES animated:NO]; 
} 

답변

11

상태 표시 줄과 탐색 모음을 동시에 숨기면이 문제가 발생할 수 있습니다. 나는 심지어 0 지연을 가지고 performSelector:withObject:afterDelay으로 내비게이션 막대를 숨기거나 표시함으로써이를 해결할 수있었습니다.

+8

이것은 나를 위해 일했습니다. 나는 navigationBarHidden을 YES로 설정하고 즉시 NO로 설정하여 "다시 프레임으로"만들 수있었습니다. –

0

는 귀하의보기가 너무 크게 설정되어있다. Interface Builder를 사용하여 .xib로 만들려면 "Simulated Interface Elements"아래의 상태 표시 줄에 대한 설정을 활성화하거나 수동으로보기 높이를 줄여야합니다.

+0

. 내 시야가 적절하게 조정되었습니다. 아마도 내가 상태 및 탐색 바를 숨겨서 다시 표시했을 때만이 문제가 발생한다고 언급 했어야합니다. 보기는 사진 앱과 마찬가지로 전체 화면과 그렇지 않은 화면간에 전환 할 수 있습니다. –

5

"performSelector"를 사용하면 효과가 있습니다.

그러나 일부는 탐색 모음을 숨김 해제하는 명령문이 이미있는 경우에도 "viewWillDisappear"에 다음을 추가하는 것이 더 쉽습니다. 그것을하지

[self.navigationController setNavigationBarHidden:YES animated:NO]; 
[self.navigationController setNavigationBarHidden:NO animated:NO]; 
0
- (void)fixNavigationBarUnderStatusbarBug 
{ 
   //This method fix bug! Don't cut it 
   //Bug: Statusbar hide navigationBar after device rotation. 
   if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) { 
       NSNotificationCenter *center = [NSNotificationCenter defaultCenter]; 
       NSOperationQueue *mainQueue = [NSOperationQueue mainQueue]; 
       [center addObserverForName:UIDeviceOrientationDidChangeNotification object:nil 
                            queue:mainQueue usingBlock:^(NSNotification *note) { 
                                UIApplication *currentApplication = [UIApplication sharedApplication]; 
                                if (currentApplication.statusBarHidden) { 
                                    [currentApplication setStatusBarHidden:NO]; 
                                    double delayInSeconds = .1; 
                                    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
                                    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
                                        [currentApplication setStatusBarHidden:YES]; 
                                    }); 
                                } 
                            }]; 
   } 
}