Скрыть строку состояния на iPhone на одном экране?
Я хочу показать строку состояния в своем приложении во всех представлениях, кроме одного. Я попытался изменить "панель состояния изначально скрыта" в plist, я пробовал:
[[UIApplication sharedApplication] setStatusBarHidden:YES];
Это скрывает панель, но оставляет уродливый синий ящик, в котором была строка состояния (которая не является частью моего представления, там нет ничего голубого).
Я также попытался изменить макет, который хочет установить полный экран и настройки строки состояния в битрейдере "Interface Builder" Xcode 4.2.
Любые предложения?
РЕДАКТИРОВАТЬ - СОРТ РЕШЕНИЯ:
Я сделал это, включив:
-(void)viewWillDisappear:(BOOL)animated{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
-(void)viewDidAppear:(BOOL)animated{
[[UIApplication sharedApplication] setStatusBarHidden:NO];
}
на каждой странице, на которой я хочу, чтобы строка состояния была включена.
Он по-прежнему выглядит изменчивым и мусорным, потому что панель вкладок появляется и появляется каждый раз при переключении вида. Но у меня было достаточно, работала над этой глупой проблемой в течение примерно 5 часов, так что это должно будет сделать.
SECOND EDIT -
Исправлена изменчивость, включая setStatusBarHidden = NO в viewWillAppears. Бог знает, как все работает, но это происходит.
Ответы
Ответ 1
Попробуйте этот вариант. Он отлично работает.
[[UIApplication sharedApplication] setStatusBarHidden:YES];
И в XIB нет опции для строки состояния.
для iOS 7.
Перейдите в info.plist и добавьте два атрибута, если они отсутствуют. установите "Строка состояния изначально скрыта" на "ДА" и установите "UIViewControllerBasedStatusBarAppearance" в "НЕТ". Это скроет строку состояния для вашего приложения.
Ответ 2
#pragma mark - Hide statusbar
-(void)hideStatusBar {
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 70000
// iOS 7.0 or later
[self setNeedsStatusBarAppearanceUpdate];
#else
// less than 7
[[UIApplication sharedApplication] setStatusBarHidden:YES];
#endif
}
- (BOOL)prefersStatusBarHidden {
return YES;
}
Ответ 3
Если кто-то ищет решение, в котором вышеприведенное решение не работает (и в нем все еще есть раздражающий синий 20px-пробел), попробуйте поместить его в viewWillAppear в файл реализации контроллера представления, который вы бы например, чтобы строка состояния была скрыта.
self.navigationController.navigationBar.frame = CGRectOffset(self.navigationController.navigationBar.frame, 0.0, -20.0);
Это буквально заняло у меня 12 часов или около того, чтобы исправить, и это было решение, поэтому теперь я распространяю это слово, если у кого-то есть эта неприятная проблема.
Ответ 4
Решение Kartik работало для меня.
[[UIApplication sharedApplication] setStatusBarHidden:YES];
Я добавил это в метод экземпляра viewWillAppear:
.
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[UIApplication sharedApplication] setStatusBarHidden:YES];
self.webView.scalesPageToFit = YES;
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.co.uk"]]];
}
И я тоже потратил на это время. Использование Xcode 4.2, iOS5 sim.
Но когда я впервые его реализовал, появилось раздражающее "пространство" наверху. Я выбрал View Controller в раскадровке и задал следующие свойства:
Размер: Full Screen
StatusBar: Нет
все остальное выведено.
Я проверил, хочет полноэкранный режим.
Воила, все получилось отлично.
Ответ 5
Я знаю, что это старый вопрос, но ни один из этих ответов не работает для меня, так вот как это работает для меня, чтобы скрыть строку состояния в единственном viewController
Сначала в вашем родительском контролере вы должны установить:
- (UIViewController *)childViewControllerForStatusBarHidden {
if ( hideStatusBarViewController ) {
return hideStatusBarViewController;
}
return nil
}
Он возвращает только контроллер дочернего представления, когда его созданное в противном случае значение nil является значением по умолчанию. Когда вы добавляете свой hideStatusBarViewController, вы должны позвонить
[self setNeedsStatusBarAppearanceUpdate];
на parentViewController, эта функция заставляет читать childViewControllerForStatusBarHidden. Наконец, в hideStatusBarViewController вы должны установить
- (BOOL)prefersStatusBarHidden {
return YES;
}
Это единственное решение, которое работает для меня. Надеюсь, это поможет кому-то.
Ответ 6
Я предлагаю вам другой подход: вставьте этот вид в окно приложения:
YourUIAppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
[appDelegate.window insertSubview:self.yourView atIndex:([[appDelegate.window subviews]count])];
Таким образом, он будет отображаться в строке состояния
Я надеюсь, что это поможет вам
Ответ 7
Это решение, если вы хотите скрыть строку состояния в одном представлении
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[UIApplication sharedApplication] setStatusBarHidden:YES];
[self.view sizeToFit];
}
Ответ 8
Вот фрагмент кода, который может помочь. Когда при загрузке представления отображается строка состояния, когда вы покидаете представление, скройте его снова.
-(void)viewWillAppear:(BOOL)animated {
if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden: withAnimation:)])
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
else
[[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES];
}
-(void)viewWillDisappear:(BOOL)animated {
if([[UIApplication sharedApplication] respondsToSelector:@selector(setStatusBarHidden: withAnimation:)])
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
else
[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
}
Ответ 9
[[UIApplication sharedApplication] setStatusBarHidden:BOOL];
достаточно, но:
-
Не забудьте установить его обратно в NO
, прежде чем покинуть представление или страницу, на которую вы вернетесь, скорее всего, появится панель Nav в строке состояния.
-
Удостоверьтесь, что вы установили и скрытие и отображение строки состояния в представлении, в котором вы хотите, чтобы строка состояния была скрыта. Я отключил функцию viewDidLoad
и - снова включился в методе viewWillDisappear:animated
. Позднее, и у вас проблемы.