Не удается скрыть строку состояния в 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
в 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. А потом это сработало.
чтобы скрыть строку состояния в iOS7 вам нужно 2 строки кода
приложение:
(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptionsнаписать[application setStatusBarHidden:YES];в инфо.plist добавить это
View-Controller Based Status Bar Appearance = NO
чтобы использовать устаревший метод UIApplication для скрытия / отображения строки состояния, ваше приложение должно установить значение plist для iOS 7:
View-Controller Based Status Bar Appearance = NOпо умолчанию это значение равно YES. Если вы измените его на нет, вы можете использовать устаревшие методы. Если вы оставите его установленным в Да, вы все равно можете скрыть строку состояния, но это зависит от каждого подкласса контроллера вида в вашем приложении, чтобы переопределить:
prefersStatusBarHiddenдля возврата да.в любое время ваше приложение нуждается в появлении строки состояния или видимость для изменения, а внешний вид строки состояния на основе контроллера вида установлен в Да, ваш внешний контроллер вида должен вызвать:
setNeedsStatusBarAppearanceUpdateAnimation
есть так много комбинаций, предложенных для этой проблемы, но проблема в том, что 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 файл (перейдите в раздел "Информация" в настройках приложения)
View controller-based status bar appearance --- NOзатем вы можете вызвать эту строку, чтобы скрыть строку состояния:
[[UIApplication sharedApplication] setStatusBarHidden:YES];
просто добавьте эти 2 строки в информацию.plist файл. Это сделает исправление для iOS7 и более старой версии.
- строка состояния изначально скрыта = да
- внешний вид строки состояния на основе контроллера = нет
перейдите к проекту и выберите цели - > общие и см. " Стиль строки состояния ...Скрыть во время запуска приложения" будет установлен флажок. Это сработает.
попробуйте этот простой метод:
- (void)viewWillAppear:(BOOL)animated { [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone]; } - (void)viewWillDisappear:(BOOL)animated { [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone]; }
единственное, что сработало для меня, это добавить следующее в ваш plist
<key>UIStatusBarHidden</key> <true/> <key>UIViewControllerBasedStatusBarAppearance</key> <false/>
самый простой способ, который я нашел для скрытия строки состояния во всем приложении, - это создать
categoryonUIViewControllerи переопределитьprefersStatusBarHidden. Таким образом, вам не нужно писать этот метод в каждом контроллере вида.UIViewController + HideStatusBar.h
#import <UIKit/UIKit.h> @interface UIViewController (HideStatusBar) @endUIViewController + HideStatusBar.м
#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
в plist добавить - - - -
внешний вид строки состояния на основе контроллера- - - нет
в каждом 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.Перейдите к информации о вашем приложении.plist файл.
2.И установите, внешний вид строки состояния на основе контроллера: Boolean NO
надеюсь, что я решил проблему строки состояния.....
для iOS 7 в одном представлении используйте метод viewWillappear:
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];для отображения строки состояния используйте:
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];
в файле Info Plist добавьте строку для следующего свойства
имя свойства: вид контроллера на основе внешнего вида строки состояния
значение:
многие ответы на эту тему работают, но я понимаю, что если вы пытаетесь сделать что-то динамическое, вам в конечном итоге нужно будет позвонить:
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
попробуйте добавить следующий метод в корневой контроллер представления вашего приложения:
- (BOOL)prefersStatusBarHidden { return YES; }
Я пробовал все эти варианты, размещенные здесь на моем проекте, и они не будут работать. Я думал, что это может быть связано с тем, что я обновил свой
Xcodeа затем приложение для iOS 7 и некоторые настройки где-то перепутались. Я решил построить для него совершенно новый проект и после простой настройки:"Status bar is initially hidden = YES" и "View controller-based status bar appearance = NO" Как заявил многих других он работал правильно (т. е. без строки состояния).Так что мой совет, если вы работаете над проектом, который был обновлен до iOS 7 из старой версии и пробовали все другие варианты, чтобы построить новый проект.
вы можете проверить это код, pod UIViewController + ODStatusBar
чтобы скрыть строку состояния для конкретного viewController
- (BOOL)prefersStatusBarHidden { return YES; }для установки строки состояния скрыто для применения:
set
View controller-based status bar appearancetoNOin .plist и вapplication: didFinishLaunchingWithOptions:set:[application setStatusBarHidden:YES];Примечание: setStatusBarHidden: устарело
или
в настройках проекта - > вкладка Общие - >информация о развертывании
Регистрация
Hide Status barкоробка.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { application.statusBarHidden = YES; return YES; }
Я не уверен, почему вы "не можете войти в форумы разработчиков Apple", но (не нарушая NDA) вы также можете скрыть свою строку состояния через Xcode. Это общая настройка для вашего целевого приложения.


Comments