2013-12-04 2 views
2

Мне нужно скрыть и показать строку состояния в моем приложении, но когда я делаю это с помощью setStatusBarHidden, моя панель навигации меняет собственный кадр (он перемещается вверх по 20pt) , Соответственно, просмотр содержимого изменяет собственный кадр (он перемещается вверх по 20pt и увеличивает собственную высоту). Как я могу изменить это поведение, и пусть мой бар и контент остаются неподвижными, пока строка состояния отображается или скрыта?Просмотр изменений собственного фрейма при скрытии или отображении строки состояния

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

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context 
{ 
    if ([keyPath isEqualToString:@"statusBarHidden"]){ 
     if ([change[NSKeyValueChangeNewKey] isEqual: @(1)]){ 
      self.navigationBar.frame = ({CGRect newFrame = self.navigationBar.frame; newFrame.origin.y = 20; newFrame;}); 
     }else { 
      self.navigationBar.frame = ({CGRect newFrame = self.navigationBar.frame; newFrame.origin.y = 20; newFrame;}); 
     } 
    } 
} 

UPD

пытался использовать эти настройки в моем содержании контроллера представления:

self.edgesForExtendedLayout = UIRectEdgeNone; 

...

-(BOOL)automaticallyAdjustsScrollViewInsets{ 
    return NO; 
} 
-(BOOL)prefersStatusBarHidden{ 
    return NO; 
} 
-(CGSize)preferredContentSize { 
    return CGSizeMake(320, 504); 
} 

не помогает при всех

ответ

0

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

overlayWin = [[UIWindow alloc] init]; 
overlayWin.backgroundColor = NAVBAR_COLOR; 
overlayWin.windowLevel = UIWindowLevelStatusBar+1.f; 
overlayWin.frame = [UIApplication sharedApplication].statusBarFrame; 
overlayWin.userInteractionEnabled = NO; 

Нет нежелательных побочных эффекты с раскладками другого вида. Ницца!

+0

Это очень грязный и очень хитрый. – user

+0

@user, возможно, лучшим решением было бы установить рамку главного окна (0,20,320,548) (примерно), а затем изменить его в случае изменений ориентации –

Смежные вопросы