Мне нужно скрыть и показать строку состояния в моем приложении, но когда я делаю это с помощью 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);
}
не помогает при всех
Это очень грязный и очень хитрый. – user
@user, возможно, лучшим решением было бы установить рамку главного окна (0,20,320,548) (примерно), а затем изменить его в случае изменений ориентации –