2012-01-30 1 views
2

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

Моя программа построена таким образом, что у меня есть контроллер представления корня, который отображает строку состояния и панель навигации, контроллер зрения содержится в навигационном контроллере т.е.

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:self.myTableViewController]; 
self.window.rootViewController = navController; 

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

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

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

У меня есть следующий код в представлении вида таблицыWillAppear: который, как я думал, должен вернуть все обратно к тому, как это было.

- (void)viewWillAppear:(BOOL)animated 
{  
    [[UIApplication sharedApplication] setStatusBarHidden: NO withAnimation: UIStatusBarAnimationFade]; 
    self.navigationController.navigationBar.translucent = NO; 
    [self.navigationController setNavigationBarHidden:NO animated:YES]; 

Почему панель навигации отображается за панель состояния при повторном представлении таблицы?

Благодаря

ответ

3

Я считаю, что в строке состояния о 20px высоко, поэтому установите origin.y в Панель навигации, чтобы быть 20, и он должен это исправить. Я знаю, что это раздражает, но, похоже, это единственный способ исправить это в моем опыте.

Также проверьте положение навигационной панели, когда ваше приложение выходит из состояния фона, я знаю, что моя навигационная панель вернулась обратно к тому, чтобы находиться под панелью состояния, когда она выходила на передний план.

0

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

(В моем проекте не только скрыть строку состояния, но и скрыть панель навигации навигационного контроллера.)

ниже необходимых кодов:

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(test) name:UIApplicationWillEnterForegroundNotification object:nil]; 
    } 
    return self; 
} 
-(void)dealloc 
{ 
    [[NSNotificationCenter defaultCenter] removeObserver:self]; 
    [super dealloc]; 
} 

- (void)test 
{ 
    // the point is UIApplicationWillEnterForegroundNotification notification process 
    // function should be called before all view controller delegate function being 
    // called, then we make all status bar and navigation bar show to restore the view's 
    // bounds, view contrller's view's bound should correct, then hide will not shift up 
    [self showStatusBarAndNaviBar]; 
    [self performSelector:@selector(hideStatusBarAndNaviBar) withObject:self afterDelay:1.0]; 
} 

//two custom function for use 
- (void)hideStatusBarAndNaviBar 
{ 
    [UIView animateWithDuration:2.0f 
         delay:0.0f 
        options:UIViewAnimationOptionAllowUserInteraction 
       animations:^(void) { 
        self.navigationController.navigationBar.alpha = 0.0f; 
        [[UIApplication sharedApplication] setStatusBarHidden:YES]; 
       } 
       completion:^(BOOL finished){}]; 
} 

- (void)showStatusBarAndNaviBar 
{ 
    [UIView animateWithDuration:1.0f 
         delay:0.0f 
        options:UIViewAnimationOptionAllowUserInteraction 
       animations:^(void) { 
        self.navigationController.navigationBar.alpha = 1.0f; 
        [[UIApplication sharedApplication] setStatusBarHidden:NO]; 
       } 
       completion:^(BOOL finished){}]; 
}