Рядок стану не зникне


112

Я створюю додаток і хочу, щоб рядок стану був прихованим. Коли я тестую додаток, панель стану прихована під час відображення екрана сплеску, але як тільки програма завантажується повністю, рядок стану знову з’являється.

Я використовую Xcode 5 та iOS 7, і спробував програмно відключити рядок стану

  ([[UIApplication sharedApplication] setStatusBarHidden:YES    
      withAnimation:UIStatusBarAnimationFade];),

у файлі info.plist та за допомогою інспектора атрибутів у файлі .xib. Здається, нічого не працює.

Будь-які ідеї?

Відповіді:


220

Спробуйте додати наступний метод до контролера кореневого вигляду програми:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

2
Як це зробити у всьому світі?
jjxtra

16
Крім того, як зазначено в документах Apple, вам слід зателефонувати [self setNeedsStatusBarAppearanceUpdate];після виклику цього методу чимось іншим, ніж значення за замовчуванням (значення за замовчуванням - НІ).
Мандерсон

3
@PsychoDad Перевір мою відповідь на більш глобальне рішення.
Ідан

2
Ідеально, дякую. Я просто не можу зрозуміти, чому iOS 7 робить це і не поважає XIB, які не містять налаштувань рядка стану!
Justinhartman

1
Додавання цього на ViewController, доданий до стеку, - це все, що мені потрібно, щоб приховати панель стану в цьому контролері перегляду; панель стану повертається, коли цей контролер перегляду видалено.
MacD

126

Ви повинні додати це значення до списку: " Переглянути зовнішній вигляд рядка стану на основі контролера " та встановити його на " НІ ".

Це дозволить вам встановити рядок стану в прихованому режимі . Це ставить його глобальним на відміну від інших наданих відповідей.

ОНОВЛЕННЯ: Якщо ви хочете, щоб панель стану була прихованою на екрані заставки, не забудьте позначити " Сховати під час запуску програми " на параметрах цільової панелі стану. Крім того, ви можете додати " Рядок стану спочатку приховано " до " ТАК " у списку, якщо ви не хочете робити це з кодом всередині програми.


2
У мене було багато часу, щоб розібратися в цьому. Думаю, це проблема, яку мали б усі, і Apple не згадала про це достатньо. Рада допомогти ...
Ідан

7
працює добре, не забудьте встановити значення .plist для "Рядок стану спочатку приховано" ТАК.
andreas-supersmart

1
О, це було єдине, що працювало з Kobold2d 2.1.0 та iOS 7, дуже дякую!
Бінаріан

5
Apple насправді не є поборниками зворотної сумісності. Давайте всі танцюємо під їх флейту та оновлюємо кожен наш додаток. Вибачте, віддушивши розчарування. Викликано Apple.
Генрік Ерландссон

1
нарешті це працює для мене. Тому що - (BOOL) віддають перевагу методустатусбарідден, який не працює в модельному перегляді.
utkal patel

73

Код, який ви опублікували, працює для iOS 6.1 та нижче. Для iOS 7 компанія Apple зробила доступними нові методи прямого керування рядком стану для кожного перегляду. Якщо вимкнути цю опцію у своєму Info.plist , ви зможете приховати рядок стану, принаймні для поточного попереднього перегляду розробника (4).

Додайте це і встановіть значення NO

Для ознайомлення ознайомтеся з посібником з переходу iOS 7, який доступний на порталі розробників Apple.


3
На мою думку, ця відповідь краща, тому що в моєму додатку я хочу ховати рядок стану лише в альбомному режимі, дякую!
Син Нгуєна

дякую, це допомагає мені, оскільки я хочу приховати це для мого цілого додатка
kevinl

2
На мій погляд, ця відповідь має бути найкращою відповіддю ->
Пояснено

5
Я це зробив, але схоже, що він просто приховав рядок стану, проте мій додаток все ще "відсунутий" за кількістю місця, яке займає рядок стану, і я все ще бачу індикатор акумулятора!
ведран

36

добре, я намагаюся приховати рядок стану у всьому своєму додатку та в "застосунку" -info.plist, і я додаю два ряди у словник "Список інформаційних властивостей", додаю "Перегляд вигляду рядка стану на основі контролера" встановити НІ та в " Рядок стану спочатку прихований "встановити ТАК і для мене працює n_n"

інформація про пліст


2
Це змушує ваш додаток перейти в режим сумісності, призначений виключно для того, щоб застарілі додатки запускалися так, як було призначено на iOS 7, коли розробники не встигають виправити додаток для нового способу робити. Натомість вам потрібно реалізувати переважні * методи у своїх контролерах перегляду.
lhunath

17

Однак якщо ви використовуєте UIImagePicker, рядок стану знову з’являється.

У такому випадку слід приховати рядок стану, як показано нижче,

- (void)imagePickerController:(UIImagePickerController *)aPicker didFinishPickingMediaWithInfo:(NSDictionary *)info {

// for iOS7
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {

        [[UIApplication sharedApplication] setStatusBarHidden:YES];
    }

2
У мене те саме питання. Рядок стану приховано, поки я не використовую UIImagePicker. Я спробував ваше рішення, і це не працює для мене. Чи потрібно було мені додати щось, окрім коду у вашій публікації?
Dev01

@WootWoot Я також додав - (BOOL) віддає перевагуStatusBarHidden {повернути ТАК; } для перегляду контролерів. Будь ласка, спробуйте.
алонес

здається, не працює для мене .. ти насправді повинен дзвонити setNeedsStatusBarAppearanceUpdate?
RyanM

Мені потрібно сховати рядок стану при натисканні кнопки. Я спробував нижче код, але він не спрацював. Може хтось, будь ласка, допоможе мені. [[UIApplication sharedApplication] setStatusBarHidden: ТАК];
janitheshan

8

Після довгих пошуків я нарешті знайшов дуже просте рішення, яке також вирішує UIImagePickerControllerпроблему.

Як було сказано в інших відповідях, встановіть рядок стану прихованим у вашому AppDelegate didFinishLaunching і встановіть "NO" зовнішній вигляд рядка стану на основі контролера "на NO.

Потім у своєму AppDelegate:

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
{
      [application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

et voila - рядок стану залишатиметься прихованим навіть тоді, коли UIImagePickerController є головним.

Це краще, ніж «перекривати» це щоразу, коли ви представляєте UIImagePickerController, оскільки він залишається прихованим у всьому додатку.


2
Хоча щось все-таки здається зламаним в iOS7 на iPad принаймні - UIImagePickerController все-таки підкидає рядок стану вдруге, коли його показують ... Hurrrr ... :-( В даний час я використовую додатокDelegate разом із тим, щоб знову ховати його в кожному оглядіWillAppear Так що навіть якщо воно ненадовго виглядає брудним, воно швидко
виправляється

1
Це єдиний метод, який працював для мене на iOS8 ... якось віддає перевагуStatusBarHidden не викликається на мій контролер перегляду.
моджуба

7

Щоб приховати рядок стану на певному UIViewController, просто додайте це:

-(BOOL)prefersStatusBarHidden
{
    return YES;
}

Сподіваюся, це допомагає!


!! Це рішення, яке працювало для мене в iOS 9.2, змінити пліст не вплинуло.
mico

5

Ви можете сховатися від резюме проекту. під час запуску приховано прапорець.

Дивіться знімок

введіть тут опис зображення


4

Я знайшов це рішення для мене. Це працює як шарм. Запишіть цей код на свій контролер перегляду, на якому ви хотіли використовувати UIImagePickerController.

- (void)viewWillDisappear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}
- (void)viewWillAppear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
     }

3

Окрім відповіді з алонів вище, переконайтеся, що реалізуєте метод imagePickerControllerDidCancel і додайте туди ж код.


2

У мене виникли проблеми і з UIImagePicker. Подібно до відповіді Алонеса, моє рішення було наступним. Я додав цей рядок або код:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

до цієї функції:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated

Я не перевіряв це на iOS 6 або старшій версії, але він чудово працює в iOS 7.


2

Швидке рішення

просто додайте це до своїх контролерів перегляду:

override func prefersStatusBarHidden() -> Bool {
    return true
}

0

Я використовую Xcode 6, це рішення працює для iOS 7 та 8 для мене:

По-перше, встановіть "Перегляд зовнішнього вигляду рядка стану на основі контролера" на "НІ" у файлі плисту.

По-друге, в AppDelegate додайте це:

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame
{
      [application setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}

0

Моя проблема полягала в тому, що я використовував обмеження контролера перегляду. Лише самий верхній контролер перегляду, який, наприклад, вбудований у навігаційний контролер, може приховати або показати рядок стану.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.