it-swarm.com.ru

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

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

Не работает:

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

Не работает:

[UIApplication sharedApplication].statusBarHidden = YES;

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

267
Melih Büyükbayram

в вашем 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

556
satgi

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

- (BOOL)prefersStatusBarHidden {
    return YES;
}
277
invoodoo

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

-> Status bar is initially hidden = ДА

-> View controller-based status bar appearance = НЕТ

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

84
user1179912

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

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

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

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

53
Debora Fortini

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

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

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

    View-Controller Based Status Bar Appearance = NO
    
16
Shaik Riyaz

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

View-Controller Based Status Bar Appearance = NO

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

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

setNeedsStatusBarAppearanceUpdateAnimation

15
jaredsinclair

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

11
SaltyNuts

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

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

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

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

View controller-based status bar appearance --- NO

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

[[UIApplication sharedApplication] setStatusBarHidden:YES];
7
Peter Y

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

  • Строка состояния изначально скрыта = ДА
  • Просмотреть внешний вид строки состояния на основе контроллера = НЕТ

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

6
Sid

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

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

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

Единственное, что сработало для меня, это добавить следующее в свой список

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

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

    Просмотреть внешний вид строки состояния на основе контроллера --- НЕТ

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

3
user2823580

-(BOOL)prefersStatusBarHidden { return YES; }

3
Thunderbird

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

1. Перейдите в файл приложения info.plist.

2.И установить, просмотреть внешний вид строки состояния контроллера: Boolean NO

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

3
chandrika

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

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

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

[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:NO];
3
oscar castellon

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

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

Значение: НЕТ

2
user842553

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

[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
2
darkheartfelt

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

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

1
user1529408

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

- (BOOL)prefersStatusBarHidden
    {
        return YES;
    }
1
BHUPI

Вы можете проверить это code , pod IViewController + ODStatusBar

0
Alex Nazaroff

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

- (BOOL)prefersStatusBarHidden {
    return YES;
}

Для настройки строки состояния, скрытой для приложения:

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

    Примечание: setStatusBarHidden: устарело

OR

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

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

0
Lal Krishna

Для Swift 2.0+ IOS 9

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