Не удается скрыть строку состояния в iOS7



Я только что обновил свой iPhone 5 iOS 7 до четырех бета-версии. Теперь, когда я запускаю свое приложение из Xcode 5 на этом iPhone, строка состояния не скрывается, хотя и должна.



Не Работает:



[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationFade];


Не Работает:



[UIApplication sharedApplication].statusBarHidden = YES;



не удается войти в форумы разработчиков Apple


663   25  

25 ответов:

в вашем файле plist приложений добавьте строку, назовите ее "внешний вид строки состояния на основе контроллера" и установите для нее значение NO

обратите внимание, что это просто не работает, если вы используете UIImagePickerController в приложении.

от http://www.openfl.org/developer/forums/general-discussion/iphone-5ios-7-cant-hide-status-bar/, решение mgiroux

An example adding View Base Controller to your Info settings in Xcode

добавить метод в контроллер представления.

- (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. А потом это сработало.

чтобы скрыть строку состояния в iOS7 вам нужно 2 строки кода

  1. приложение:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions написать

    [application setStatusBarHidden:YES];
    
  2. в инфо.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/>

самый простой способ, который я нашел для скрытия строки состояния во всем приложении, - это создать category on UIViewController и переопределить prefersStatusBarHidden. Таким образом, вам не нужно писать этот метод в каждом контроллере вида.

UIViewController + HideStatusBar.h

#import <UIKit/UIKit.h>

@interface UIViewController (HideStatusBar)

@end

UIViewController + 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

-(BOOL)prefersStatusBarHidden { return YES; }

  1. в plist добавить - - - -

    внешний вид строки состояния на основе контроллера- - - нет

  2. в каждом 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

для Swift 2.0 + IOS 9

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

чтобы скрыть строку состояния для конкретного viewController

- (BOOL)prefersStatusBarHidden {
    return YES;
}

для установки строки состояния скрыто для применения:

  • set View controller-based status bar appearancetoNO in .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. Это общая настройка для вашего целевого приложения. enter image description here

Comments

    Ничего не найдено.