62
задан 16 May 2012 в 20:19

3 ответа

Я записал статическому подражанию библиотеки наложение строки состояния Reeders, можно найти его здесь: https://github.com/myell0w/MTStatusBarOverlay

MTStatusBarOverlay MTStatusBarOverlay

Это в настоящее время поддерживает iPhone и iPad, значение по умолчанию и непрозрачные черные стили строки состояния, вращение, 3 различных режима анимации, отслеживание истории и много большего количества положительных героев!

Не стесняются использовать его или отправлять мне Запрос Получения по запросу для улучшения его!

58
ответ дан 31 October 2019 в 13:30

Все ответы похожи на работу, но в iOS6.0 у меня есть следующие проблемы:

1/взгляды Вращений плохо

2/Окно (строка состояния является видом Окна) необходимый rootViewController

я использую ответ от [1 118] myell0w, но поворачиваю работы, не хорошие. Я имею, просто удаляют одно дополнительное окно и использующий UIWindow из AppDelegate для реализации строки состояния. Может быть это решение, в порядке только для одного UIViewController-приложения...

Ive, реализованный следующим путем:

1/В ApplicationDelegate:

self.window.windowLevel = UIWindowLevelStatusBar + 1;
self.window.backgroundColor = [UIColor clearColor];
self.window.rootViewController = _journalController;

2/Создают пользовательский UIView и реализуют все, в чем Вы нуждаетесь внутри: Для примера осязаемая строка состояния:

@interface LoadingStatusBar : UIControl 

И легко создают и добавляют к Вашему представлению контроллера:

_loadingBar = [[LoadingStatusBar alloc] initWithFrame:topFrame];
[self addSubview:_loadingBar];

3/Некоторое волшебство, когда добавляют Ваше представление контроллера (в initWithFrame:)

    CGRect mainFrame = self.bounds;
    mainFrame.origin.y = 20;
    self.bounds = mainFrame;

Ваше представление контроллера будет иметь 2 представления - представление содержания и представление строки состояния. Можно показать строку состояния или скрыть ее, когда Вы хотите. Кадр довольных представление будет:

_contentView.frame = CGRectMake(0, 20, self.bounds.size.width, self.bounds.size.height);

4/И одно последнее волшебство здесь :) Для обнаружения касаний в не осязаемая область, я использовал:

-(id)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    if (point.y < 20) return _loadingBar;
    return [super hitTest:point withEvent:event];
}

На данный момент это хорошо работает на iPad/iPhone и вся iOS от 4 до 6.

4
ответ дан 31 October 2019 в 13:30

В первую очередь, большое спасибо @Martin AllГ©us для того, чтобы предоставить код для этой реализации.

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

, Если Приложение запускается, в то время как вызов существует, высота строки состояния составит 40 пикселей, и это означает, что пользовательская строка состояния будет инициализирована с той высотой. Но если вызов будет закончен, в то время как Вы находитесь все еще в приложении, высота строки состояния останется все еще 40 пикселями, и это будет выглядеть странным.

, Таким образом, решение просто: я использовал центр Уведомления для подписки на кадр строки состояния, изменяют делегата приложения и корректируют кадр:

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame {
    //an in call toggle was done    
    //fire notification
    [[NSNotificationCenter defaultCenter] postNotificationName:kStatusBarChangedNotification object:[NSValue valueWithCGRect:oldStatusBarFrame]];
}

И в ACStatusBarOverlayWindow мы подписываемся на уведомление:

-(id)initWithFrame:(CGRect)frame
{
    if ((self = [super initWithFrame:frame]))
    {
        // Place the window on the correct level & position
        self.windowLevel = UIWindowLevelStatusBar + 1.0f;
        self.frame = [UIApplication sharedApplication].statusBarFrame;
        self.backgroundColor = [UIColor blackColor];

        //add notification observer for in call status bar toggling
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarChanged:) name:kStatusBarChangedNotification object:nil];
    }
    return self;
}

и наш код для корректировки кадра:

- (void)statusBarChanged:(NSNotification*)notification {
    //adjust frame...    
    self.frame = [UIApplication sharedApplication].statusBarFrame;
    //you should adjust also the other controls you added here
}

Эти kStatusBarChangedNotification просто константа, которую я использовал для легкой ссылки, можно просто заменить ее строкой или объявить константу глобально.

1
ответ дан 31 October 2019 в 13:30

Другие вопросы по тегам:

Похожие вопросы: