Все ответы выглядят как рабочие, но в iOS6.0 у меня следующие проблемы:
1 / Поворот выглядит плохо
2 / Window (строка состояния - это тип Window), необходимый rootViewController
Я использую ответ от myell0w , но вращение работает не очень хорошо. Я только что удалил одно дополнительное окно и использовал UIWindow из AppDelegate для реализации строки состояния.
Может быть, это решение подходит только для одного приложения UIViewController ...
Я реализован следующим образом:
1 / В заявке на делегирование:
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.