Скрыть строку состояния на iPhone в одном представлении? - PullRequest
33 голосов
/ 30 ноября 2011

Я хочу показать строку состояния в моем приложении во всех представлениях, кроме одного. Я попытался изменить «строка состояния изначально скрыта» в листе, я попытался:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

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

Я также пытался изменить макет хочет, чтобы настройки полного экрана и строки состояния были в бите «построителя интерфейса» Xcode 4.2.

Есть предложения?

РЕДАКТИРОВАТЬ - ВИД РЕШЕНИЯ:

Я сделал это, включив:

    -(void)viewWillDisappear:(BOOL)animated{


    [[UIApplication sharedApplication] setStatusBarHidden:YES];

}


-(void)viewDidAppear:(BOOL)animated{


    [[UIApplication sharedApplication] setStatusBarHidden:NO];

}

на каждой странице, на которой я хочу, чтобы была строка состояния.

Он по-прежнему выглядит прерывистым и мусорным, потому что панель вкладок появляется и появляется снова при каждом переключении вида. Но с меня хватит, я работал над этой дурацкой проблемой около 5 часов, так что это придется делать.

ВТОРОЕ РЕДАКТИРОВАНИЕ -

Исправлена ​​нестабильность путем включения setStatusBarHidden = NO в viewWillAppears. Бог знает, как все работает, но работает.

Ответы [ 9 ]

42 голосов
/ 30 ноября 2011

Попробуйте. Это будет работать отлично.

[[UIApplication sharedApplication] setStatusBarHidden:YES];

И в XIB не установите никакой опции для строки состояния.

для iOS 7.

info.plist и добавьте два атрибута, если они отсутствуют.установите «Строка состояния изначально скрыта» на «ДА» и установите «UIViewControllerBasedStatusBarAppearance» на «НЕТ».Это скроет строку состояния вашего приложения.

16 голосов
/ 25 сентября 2013
#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;
}
8 голосов
/ 04 января 2012

Если есть кто-то, кто ищет решение, в котором вышеуказанное решение не работает (и все еще есть раздражающий синий разрыв в 20px вверху), попробуйте поместить это в viewWillAppear в файле реализации контроллера представления, который вы бы хотели как строка состояния, которая будет скрыта.

self.navigationController.navigationBar.frame = CGRectOffset(self.navigationController.navigationBar.frame, 0.0, -20.0);

Это буквально заняло у меня 12 часов или около того, чтобы это исправить, и это было решением, так что теперь я распространю слово на тот случай, если у кого-то еще возникнет эта досадная проблема.

7 голосов
/ 02 февраля 2012

Решение Картика сработало для меня.

[[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 в раскадровке и установил свойства следующим образом: Размер: полный экран StatusBar: нет все остальное выведено.

Я проверил, хочет полный экран.

Вуаля, все работало нормально.

2 голосов
/ 13 февраля 2015

Я знаю, что это старый вопрос, но ни один из этих ответов не работает для меня, поэтому именно так я могу скрыть строку состояния в одном viewController

Сначала в вашем parentViewController вы должны установить:

- (UIViewController *)childViewControllerForStatusBarHidden {
    if ( hideStatusBarViewController ) {
        return hideStatusBarViewController;
    }
    return nil
}

Он возвращает дочерний контроллер вида, только если он создан, иначе nil является значением по умолчанию. Когда вы добавляете ваш hideStatusBarViewController, вы должны вызвать

[self setNeedsStatusBarAppearanceUpdate];

в parentViewController, эта функция заставляет читать childViewControllerForStatusBarHidden. Наконец, в hideStatusBarViewController вы должны установить

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Это единственное решение, которое работает для меня. Надеюсь, это кому-нибудь поможет.

1 голос
/ 11 июня 2013

Это решение, если вы хотите скрыть строку состояния в отдельном представлении

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    [[UIApplication sharedApplication] setStatusBarHidden:YES];
    [self.view sizeToFit];
}
1 голос
/ 30 ноября 2011

Я бы предложил вам другой подход: вставьте это представление в окно приложения:

YourUIAppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
[appDelegate.window insertSubview:self.yourView atIndex:([[appDelegate.window subviews]count])];

Таким образом, он будет отображаться в строке состояния

Я надеюсь, что это поможет вам

0 голосов
/ 07 июля 2013

Достаточно [[UIApplication sharedApplication] setStatusBarHidden:BOOL];, но:

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

  2. Убедитесь, что вы установили скрытие и отображение строки состояния в представлении, в котором вы хотите скрыть строку состояния.Я выключил метод viewDidLoad и - критически - снова включил метод viewWillDisappear:animated.Чуть позже и у вас неприятности.

0 голосов
/ 30 ноября 2011

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

-(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];
}
...