Приховати рядок стану в додатку iOS 8


74

я намагався

[[UIApplication sharedApplication] setStatusBarHidden:YES]; 

Це нічого не робить.

І я шукав у своєму Info.plistфайлі "Перегляд зовнішнього вигляду рядка стану на основі контролера", але його там немає.

Як я можу приховати білий рядок стану у верхній частині екрана (з годинником та зарядом батареї) всередині моєї програми для Xcode 6? Дякую!


4
За потреби ви можете додавати записи до Info.plist. Крім того, я пропоную шукати в SO та Google. Про це багато запитували і відповідали. Вам потрібно буде знати, як шукати відповіді на більш складні питання незабаром, краще розпочати зараз.
djromero

2
Дійсна критика, дякую.
Агресор

2
Просто пропозиція @djromero - якщо ми припиняємо публікацію нових версій старих питань, відповіді старіють - чи не слід заохочувати їх? Це також означає, що новачки, які відповідають на ці запитання, отримують кредит, і вся система залишається в живих.
amergin

@amergin Дублікат запитання не є свіжим у будь-якому сенсі. Щодня для новачків вистачає питань. Я не пам’ятаю точно через 1 рік , але на той момент було очевидно, що на це питання вже було дано відповідь SO. Насправді Оператор подякував мені, тому я не знаю, в чому ваша думка.
djromero

1
@amergin Я не сприймаю це як критику. Я просто хочу, щоб ви зрозуміли мою точку зору: питання не може бути свіжим, лише іншим. Повторювані запитання ускладнюють їх подальший пошук. Пропозиція чи критик, який ви можете мені зробити: чому ви не проголосували, щоб закрити його як дуп? Я не пам’ятаю.
djromero

Відповіді:


173

Вам потрібно замінити цей метод на кожному контролері перегляду, якщо у вас немає цього запису plist.

Завдання-C

-(BOOL)prefersStatusBarHidden{
    return YES;
}

Стрімкий 2

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

Свіфт 3+

override var prefersStatusBarHidden: Bool {
    return true
}

І не забудьте встановити (якщо ви представляєте контролер подання, викликавши presentViewController: animated: complete: method):

Завдання-C

vcToBeShownWithoutStatusbar.modalPresentationCapturesStatusBarAppearance = YES;

Стрімкий

vcToBeShownWithoutStatusbar.modalPresentationCapturesStatusBarAppearance = true

Документація: https://developer.apple.com/reference/uikit/uiviewcontroller/1621453-modalpresentationcapturesstatusb

Якщо ви змінюєте рядок стану з якогось контролера перегляду контейнера (наприклад, UINavigationControllerабо UIViewControllerз контролерами дочірнього перегляду), і ви хочете змінити контролер перегляду, відповідальний за рядок стану, ви повинні використовувати childViewControllerForStatusBarHidden:властивість. Наприклад:

Встановіть перший екземпляр контролера подання, завжди відповідальний за управління рядком стану

Завдання-C

- (UIViewController *)childViewControllerForStatusBarHidden {
    return childViewControllers.first; // or viewControllers.first
}

Стрімкий 2

override var childViewControllerForStatusBarHidden() -> UIViewController? {
    return childViewControllers.first // or viewControllers.first
}

Свіфт 3+

override var childViewControllerForStatusBarHidden: UIViewController? {
    return childViewControllers.first // or viewControllers.first
}

Встановіть контролер подання контейнера, відповідальний за управління рядком стану

Завдання-C

- (UIViewController *)childViewControllerForStatusBarHidden {
    return nil;
}

Стрімкий 2

override func childViewControllerForStatusBarHidden() -> UIViewController? {
    return nil
}

Свіфт 3+

override var childViewControllerForStatusBarHidden: UIViewController? {
    return nil
}

Документація: https://developer.apple.com/documentation/uikit/uiviewcontroller/1621451-childviewcontrollerforstatusbarh


чи є шлях до цього в усьому світі, можливо, відпочинок коду в appdelegate?
CaffeineShots

Так, створіть власний UIViewController, а потім успадковуйте від нього.
VaporwareWolf

Не забудьте зателефонувати, setNeedsStatusBarAppearanceUpdateякщо вам потрібно змусити його оновити поточний контролер перегляду в довільний час
Альберт Реншоу,

121
  1. Перейдіть до файлу Info.plist
  2. Наведіть курсор на один із цих рядків, і з’являться кнопки (+) та (-).
  3. Натисніть кнопку плюса, щоб додати новий ключ
  4. Введіть старт з великої V, і автоматично першим вибором буде Перегляд зовнішнього вигляду рядка стану на основі контролера . Додайте це як КЛЮЧ.
  5. Встановіть для VALUE значення "NO"
  6. Перейдіть до вас AppDelegate.m для Objective-C ( для швидкої мови: AppDelegate.swift )
  7. Додайте код всередину методу

Для Objective-C:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [application setStatusBarHidden:YES];

    return YES;
}

Для Свіфта:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey:Any]?) -> Bool {
    application.statusBarHidden = true

    return true
}

Готово! Запустіть свій додаток і більше немає рядка стану!


2
Дякую, вперше я знайшов, що хтось це добре пояснює, і це насправді має сенс
Карл Хамфріс,

7
достатньо лише перших 5 кроків, якщо ви додали ще один ключ до info.plist, додайте цей ключ = "Рядок стану спочатку прихований" зі значенням = "Так"
Мехул Таккар

Дякуємо за !!!, лише невелика порада - вам не потрібно кодувати у файлі appDelegate, замість цього виберіть параметр "Сховати рядок стану" у налаштуваннях цілей XCode, зміни до списку все ще застосовуватимуться. Щасливого кодування !!!
Ashwin G

27

Ви можете приховати рядок стану, не вписуючи жодного рядка коду, для цього потрібно лише два записи у списку info.plist, перший -

"Переглянути вигляд рядка стану на основі контролера" встановлено на НІ

другий є

"Рядок стану спочатку приховано" встановлено на ТАК


Переглянути зовнішній вигляд рядка стану на основі контролера зробив свою справу!
Макалеле

11

Ви можете додати цей рядок у файл Info.plist, якщо його там немає. Просто перейдіть до проекту в Xcode, перейдіть до розділу "Інформація" та наведіть курсор на один із існуючих рядків. Повинна з'явитися кнопка "+", що дозволяє додати рядок і ввести "Перегляд зовнішнього вигляду рядка стану на основі контролера".


Дякую за підказку, я використав вищезазначену відповідь, але приємно знати, як це працює! Багато вдячний
Агресор

Ця відповідь потрібна для iOS 9.
Бето,

9

Для iOS 10 із Swift 3 слід використовувати:

override var prefersStatusBarHidden: Bool {
    get {
        return true
    }
}

1
Насправді це працює з iOS 10. Я віддаю перевагу короткій версії "override var preferfersStatusBarHidden: Bool {return true}"
Calin Chitu

3
  1. Відкрийте info.plist
  2. "Переглянути вигляд рядка стану на основі контролера" встановлено на НІ
  3. "Рядок стану спочатку приховано" встановлено на ТАК
  4. Готово

Не потрібно писати рядок коду ... Вітаємо


-4

Якщо ви використовуєте UIDocumentInteractionController для показу даних, ви ніколи не приховуєте рядок стану, тому у мене є альтернатива цього

 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

цей рядок змінює колір вмісту рядка стану на білий

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