Не удается скрыть строку состояния в iOS7
Я только что обновил свой iPhone 5 iOS 7 до четырех бета-версии. Теперь, когда я запускаю свое приложение из Xcode 5 на этом iPhone, строка состояния не скрывается, хотя и должна.
Не работает:
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];
Не работает:
[UIApplication sharedApplication].statusBarHidden = YES;
Не удается войти на форумы разработчиков Apple
25 ответов
В вашем plist-файле приложения добавьте строку с именем "Просмотр внешнего вида строки состояния на основе контроллера" и установите для нее значение NO
Обратите внимание, что это просто не работает, если вы используете UIImagePickerController в приложении.
от http://www.openfl.org/developer/forums/general-discussion/iphone-5ios-7-cant-hide-status-bar/, раствор mgiroux
Добавьте метод в вашем контроллере представления.
- (BOOL)prefersStatusBarHidden {
return YES;
}
В Plist добавить следующие свойства.
-> Status bar is initially hidden
= ДА
-> View controller-based status bar appearance
= НЕТ
Добавьте оба - теперь строка состояния исчезнет.
Чтобы скрыть строку состояния в одном представлении, вы должны использовать:
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
Сначала это не сработало для меня, а затем в документации этого метода было замечено следующее: // Установка statusBarHidden ничего не делает, если ваше приложение использует стандартную систему строки состояния на основе UIViewController.
Это должно быть сделано в файле plist, добавив ключ View controller-based status bar appearance
установлен в NO
, И тогда это сработало.
Чтобы использовать устаревший метод UIApplication для скрытия / отображения строки состояния, ваше приложение должно установить значение plist для iOS 7:
View-Controller Based Status Bar Appearance = NO
Это значение по умолчанию установлено в YES. Если вы измените его на NO, вы можете использовать устаревшие методы. Если вы оставите значение YES, вы все равно сможете скрыть строку состояния, но каждый подкласс контроллера представления в вашем приложении может переопределить: prefersStatusBarHidden
вернуть ДА.
Каждый раз, когда вашему приложению требуется изменить внешний вид или видимость строки состояния, а внешний вид строки состояния на основе View-Controller устанавливается на YES, вашему внешнему контроллеру представления необходимо вызвать:
setNeedsStatusBarAppearanceUpdateAnimation
Чтобы скрыть строку состояния в iOS7, вам нужно 2 строки кода
inapplication:
(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
записывать[application setStatusBarHidden:YES];
в info.plist добавить это
View-Controller Based Status Bar Appearance = NO
Для этой проблемы предлагается так много комбинаций, но проблема в том, что iOS 6 и 7 используют разные методы, чтобы скрыть строку состояния. У меня никогда не было успешной установки параметров plist для включения поведения в стиле iOS6 на iOS 7, но если вы создаете свое приложение для поддержки iOS 6+, вам нужно использовать 3 метода одновременно, чтобы гарантировать, что конкретный контроллер представления скрывает статус бар:
// for ios 7
- (BOOL)prefersStatusBarHidden{
return YES;
}
// for ios 6
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
// explicitly set the bar to show or it will remain hidden for other view controllers
[[UIApplication sharedApplication] setStatusBarHidden:NO];
}
Это должно работать независимо от ваших настроек plist.
Мне пришлось сделать оба изменения ниже, чтобы скрыть строку состояния:
Добавьте этот код в контроллер представления, где вы хотите скрыть строку состояния:
- (BOOL)prefersStatusBarHidden
{
return YES;
}
Добавьте это в свой файл.plist (перейдите к "info" в настройках вашего приложения)
View controller-based status bar appearance --- NO
Затем вы можете вызвать эту строку, чтобы скрыть строку состояния:
[[UIApplication sharedApplication] setStatusBarHidden:YES];
Просто добавьте эти 2 строки в файл info.plist. Это исправит и iOS7, и более старую версию.
- Строка состояния изначально скрыта = ДА
- Просмотр внешнего вида строки состояния контроллера = НЕТ
Перейдите к проекту и выберите "Цели" -> "Общие" и установите флажок "Стиль строки состояния... Скрыть во время запуска приложения". Это будет работать
Попробуйте этот простой метод:
- (void)viewWillAppear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
}
- (void)viewWillDisappear:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
}
Единственное, что сработало для меня, это добавить следующее в свой список
<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
Самый простой метод, который я нашел для сокрытия строки состояния во всем приложении, это создание category
на UIViewController
и переопределение prefersStatusBarHidden
, Таким образом, вам не нужно писать этот метод в каждом контроллере представления.
UIViewController + HideStatusBar.h
#import <UIKit/UIKit.h>
@interface UIViewController (HideStatusBar)
@end
UIViewController + HideStatusBar.m
#import "UIViewController+HideStatusBar.h"
@implementation UIViewController (HideStatusBar)
//Pragma Marks suppress compiler warning in LLVM.
//Technically, you shouldn't override methods by using a category,
//but I feel that in this case it won't hurt so long as you truly
//want every view controller to hide the status bar.
//Other opinions on this are definitely welcome
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
- (BOOL)prefersStatusBarHidden
{
return YES;
}
#pragma clang diagnostic pop
@end
Для iOS 7 в единственном представлении используйте в методе viewWillappear:
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];
Для отображения строки состояния используйте:
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];
Многие ответы в этой теме работают, но я понимаю, что если вы пытаетесь сделать что-то динамическое, вам в конечном итоге придется позвонить:
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
В плист добавьте ----
Просмотреть внешний вид строки состояния на основе контроллера --- НЕТ
В каждом viewController пишут
- (void) viewDidLayoutSubviews { CGRect viewBounds = self.view.bounds; CGFloat topBarOffset = 20.0; viewBounds.origin.y = -topBarOffset; self.view.bounds = viewBounds; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];//for status bar style }
Для проблемы строки состояния в iOS 7, но цель должна быть 5.1 и выше для приложения
Шаги для скрытия строки состояния в iOS 7:
1. Перейдите в файл приложения info.plist.
2.И установить, просмотреть внешний вид строки состояния контроллера: логическое НЕТ
Надеюсь, я решил проблему со статусной строкой.....
В Info Plist file Добавить строку для следующего свойства
Имя свойства: просмотр внешнего вида строки состояния контроллера
Значение: НЕТ
Попробуйте добавить следующий метод в корневой контроллер вашего приложения:
- (BOOL)prefersStatusBarHidden
{
return YES;
}
На 2019 год...
Чтобы сделать приложение без строки состояния,
Щелкните info.plist, щелкните правой кнопкой мыши "Добавить строку".
Добавьте эти два с этими настройками:
Это все, что нужно сделать.
Я попробовал все эти варианты, опубликованные здесь, на моем проекте, и они не будут работать. Я думал, что это может быть связано с тем, что я обновил свой Xcode
а затем приложение для iOS 7 и некоторые настройки где-то перепутались. Я решил создать совершенно новый проект для него и после простой настройки:Status bar is initially hidden = YES
" а также "View controller-based status bar appearance = NO
"Как утверждают многие другие, он работал правильно (т.е. без строки состояния).
Поэтому мой совет, если вы работаете над проектом, который был обновлен до iOS 7 со старой версии и перепробовал все остальные варианты, это создать новый проект.
Вы можете проверить этот код, под https://cocoapods.org/pods/UIViewController+ODStatusBar
Для Swift 2.0+ IOS 9
override func prefersStatusBarHidden() -> Bool {
return true
}
Чтобы скрыть строку состояния для определенного viewController
- (BOOL)prefersStatusBarHidden {
return YES;
}
Для настройки строки состояния, скрытой для приложения:
задавать
View controller-based status bar appearance
вNO
в.plist и вapplication: didFinishLaunchingWithOptions:
задавать:[application setStatusBarHidden:YES];
Примечание: setStatusBarHidden: устарело
ИЛИ ЖЕ
в настройках проекта -> вкладка "Общие" -> информация о развертывании
Проверьте
Hide Status bar
коробка.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
application.statusBarHidden = YES;
return YES;
}
Я не уверен, почему вы "не можете войти на форумы разработчиков Apple", но (не нарушая NDA) вы также можете скрыть свой statusBar через XCode. Это общая настройка цели вашего приложения.