У меня много проблем с новым автоматическим скрытием строки состояния в iOS 8.
В моем приложении у меня есть вид, в котором, когда пользователь нажимает один раз, панель навигации и строка состояния исчезают.
Когда в ландшафте, строка состояния прячется сама по себе, и это хорошо для меня. Мне это нужно только в портретном режиме.
Но проблема в том, что когда устройство находится в горизонтальной ориентации и отображается полоса, когда пользователь дважды нажимает, чтобы переключить панель (отображая ее), и переключает устройство в портретный режим, строка состояния все еще скрыта.
По сути, мне нужно иметь возможность скрывать строку состояния без вмешательства в ее естественное поведение на iOS 8, поэтому я повторю сценарий:
- Пользователь входит в указанное представление с tabBar и NavigationBar и statusBar;
- Один раз нажмите на изображение, и полосы исчезнут.
- Пользователь поворачивает устройство, панель состояния не отображается - ОК, я хочу это
- Пользователь снова нажимает, чтобы отобразить панели - StatusBar все еще скрыт, хорошо.
- Пользователь поворачивается от пейзажа к портрету и..
- StatusBar все еще скрыт - НЕ ОК.
MRW>
(источник: mshcdn.com)
Я попытался настроить статус-бар на willRotate, но я сделал беспорядок, в котором статус-бар будет виден, когда он не должен был. Код, который я использую:
- (BOOL)prefersStatusBarHidden
{
return statusBarHidden;
}
-(void)toggleBars:(UITapGestureRecognizer *)gesture{
CATransition *animation = [CATransition animation];
animation.type = kCATransitionFromBottom;
animation.subtype = kCATransitionFromTop;
animation.duration = .2f;
[animation setTimingFunction:[CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseInEaseOut]];
BOOL toggleNavigationBar = self.navigationController.navigationBarHidden;
[self.navigationController.navigationBar.layer addAnimation:animation forKey:nil];
[self.navigationController setNavigationBarHidden:!toggleNavigationBar animated:YES];
BOOL toggleTabHidden = self.tabBarController.tabBar.hidden;
if(![[[NSUserDefaults standardUserDefaults] objectForKey:@"showTabBar"]isKindOfClass:[NSNull class]]){
if([(NSNumber*)[[NSUserDefaults standardUserDefaults] objectForKey:@"showTabBar"]boolValue])
{
[self.tabBarController.tabBar.layer addAnimation:animation forKey:nil];
[self.tabBarController setHideTabBar:!toggleTabHidden animated:YES];
}
}
statusBarHidden = [UIApplication sharedApplication].statusBarHidden;
[[UIApplication sharedApplication] setStatusBarHidden:!statusBarHidden withAnimation:UIStatusBarAnimationSlide];
[self setNeedsStatusBarAppearanceUpdate];
if (IS_IOS8){
if (UIInterfaceOrientationIsLandscape(self.interfaceOrientation)){
if (statusBarHidden){
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
}
}
}
Я думал о том, чтобы установить флаг, в котором, когда statusBar скрыт, когда в альбомной ориентации присутствуют все элементы управления, при вращении он будет запускать statusBar. Безуспешно, по-видимому..
Любая помощь высоко ценится.