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

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

Не работает:

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

Не работает:

[UIApplication sharedApplication].statusBarHidden = YES;

Невозможно войти на форум разработчиков Apple.

Ответ 1

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

Обратите внимание, что это просто не работает, если вы используете 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

Ответ 2

Добавьте метод в свой контроллер.

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Ответ 3

В Plist добавьте следующие свойства.

- > Status bar is initially hidden= YES

- > View controller-based status bar appearance= NO

Добавьте оба - теперь строка состояния исчезнет.

Ответ 4

Чтобы скрыть строку состояния на одном представлении, вы должны использовать:

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

Сначала это не сработало для меня, а затем пила в документации этого метода, которая гласит: // Настройка statusBarHidden ничего не делает, если ваше приложение использует стандартную систему состояния на основе UIViewController.

Это нужно сделать в файле plist, добавив ключ View controller-based status bar appearance в значение NO. И тогда это сработало.

Ответ 5

Чтобы использовать устаревший метод UIApplication для скрытия/отображения строки состояния, ваше приложение должно установить значение plist для iOS 7:

View-Controller Based Status Bar Appearance = NO

Значение по умолчанию равно YES. Если вы измените его на НЕТ, вы можете использовать устаревшие методы. Если вы оставите его равным YES, вы все равно можете скрыть строку состояния, но до каждого подкласса контроллера представления в приложении переопределить: prefersStatusBarHidden, чтобы вернуть YES.

В любое время, когда вашему приложению требуется внешний вид строки состояния или видимость для изменения, а в строке состояния на панели управления View-Controller отображается значение YES, вашему внешнему контроллеру просмотра необходимо вызвать:

setNeedsStatusBarAppearanceUpdateAnimation

Ответ 6

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

  • inapplication: (UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions написать

    [application setStatusBarHidden:YES];
    
  • в info.plist добавьте это

    View-Controller Based Status Bar Appearance = NO
    

Ответ 7

В этой проблеме предлагается так много комбинаций, но проблема в том, что 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.

Ответ 8

Мне нужно было сделать оба изменения ниже, чтобы скрыть строку состояния:

Добавьте этот код в контроллер просмотра, где вы хотите скрыть строку состояния:

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

Добавьте это в свой .plist файл (перейдите в "info" в настройках вашего приложения)

View controller-based status bar appearance --- NO

Затем вы можете вызвать эту строку, чтобы скрыть строку состояния:

[[UIApplication sharedApplication] setStatusBarHidden:YES];

Ответ 9

Просто добавьте эти 2 строки в файл info.plist. Это сделает исправление для iOS7 и более старой версии.

  • Строка состояния изначально скрыта = YES
  • Просмотр состояния строки состояния на основе контроллера = NO

Перейдите к проекту и выберите "Цели" → "Общие" и отметьте флажок "Стиль строки состояния... Скрыть во время запуска приложения". Это будет работать.

Ответ 10

Попробуйте этот простой метод:

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

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

Ответ 11

Единственное, что сработало для меня, - добавить в свой plist

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

Ответ 12

Самый простой метод, который я нашел для скрытия строки состояния во всем приложении, - это создать category on 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

Ответ 13

  • В plist add ----

    Просмотр состояния строки состояния контроллера --- NO

  • В каждом 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 и выше для приложения

Ответ 14

-(BOOL)prefersStatusBarHidden { return YES; }

Ответ 15

Шаги для скрытия строки состояния в iOS 7:

1.Вобходимо к файлу info.plist вашего приложения.

2.And Set, Просмотреть вид строки состояния на основе контроллера: Boolean NO

Надеюсь, я решил проблему с баром состояния.....

Ответ 16

Для iOS 7 в одном представлении используйте метод viewWillappear:

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

Для отображения строки состояния используйте:

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];

Ответ 17

В файле Info Plist Добавьте строку для следующего свойства

Имя свойства: просмотр состояния строки состояния на основе контроллера

Значение: NO

Ответ 18

Многие из ответов на эту тему работают, но я понимаю, что если вы пытаетесь сделать что-либо динамическое, вам в конечном итоге нужно будет позвонить:

[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];

Ответ 19

Попробуйте добавить в свой контроллер корневого приложения следующий метод:

- (BOOL)prefersStatusBarHidden
    {
        return YES;
    }

Ответ 20

Я пробовал все эти параметры, размещенные здесь в моем проекте, и они не будут работать. Я думал, что это может быть связано с тем, что я обновил мой Xcode, а затем приложение для iOS 7, и некоторые настройки были где-то испорчены. Я решил построить для него совершенно новый проект и после простой настройки: "Status bar is initially hidden = YES" и "View controller-based status bar appearance = NO", как утверждают многие другие, он работал правильно (т.е. Нет строки состояния).

Итак, мой совет, если вы работаете над проектом, который был обновлен до iOS 7 из старой версии и попробовал все остальные опции, - это построить новый проект.

Ответ 21

Для 2019 года...

Чтобы создать приложение без строк состояния,

Нажмите info.plist, щелкните правой кнопкой мыши, чтобы "Добавить строку".

Добавьте эти два с этими настройками:

enter image description here

Это все, что нужно сделать.

Ответ 23

Для Swift 2.0+ IOS 9

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

Ответ 24

Чтобы скрыть строку состояния для определенного элемента управления просмотром

- (BOOL)prefersStatusBarHidden {
    return YES;
}

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

  • установите View controller-based status bar appearance в NO в .plist и в application: didFinishLaunchingWithOptions:: [application setStatusBarHidden:YES];

    Примечание: setStatusBarHidden: устаревший

ИЛИ

  • в настройках проекта → вкладка "Общие" → информация о развертывании

    Установите флажок Hide Status bar.

Ответ 25

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
application.statusBarHidden = YES;
return YES;
}

Ответ 26

Я не уверен, почему вы "не можете заходить на Форумы разработчиков Apple", но (без нарушения NDA) вы также можете скрыть свой статусBar через Xcode. Это общая настройка вашей целевой задачи. enter image description here