Подтвердить что ты не робот

Скрыть строку состояния на 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. Бог знает, как все работает, но это происходит.

4b9b3361

Ответ 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. Позднее, и у вас проблемы.