Я записал статическому подражанию библиотеки наложение строки состояния Reeders, можно найти его здесь: https://github.com/myell0w/MTStatusBarOverlay
Это в настоящее время поддерживает iPhone и iPad, значение по умолчанию и непрозрачные черные стили строки состояния, вращение, 3 различных режима анимации, отслеживание истории и много большего количества положительных героев!
Не стесняются использовать его или отправлять мне Запрос Получения по запросу для улучшения его!
Все ответы похожи на работу, но в 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.
В первую очередь, большое спасибо @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
просто константа, которую я использовал для легкой ссылки, можно просто заменить ее строкой или объявить константу глобально.