2014-01-15 6 views
10

У меня есть серия UINavigationControllers внутри контроллера UITabBar. Я хочу скрыть строку состояния. Когда я делаю это, однако, панель навигации приспосабливается, чтобы стать короче:Предотвращение UINavigationController от настройки источника, когда строка состояния скрыта в iOS 7

Problem Image

enter image description here

Как я могу предотвратить это и получить что-то вроде на рисунке?

desired outcome

enter image description here

В настоящее время я просто скрывает строку состояния с помощью [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];

+0

Можете ли вы показать коды? – Raptor

ответ

8

Создание пользовательского UINavigationBar с пользовательским sizeThatFits.

@implementation UINavigationBar (customNavigationBar) 
    - (CGSize)sizeThatFits:(CGSize)size { 
    CGSize newSize = CGSizeMake(self.frame.size.width,64); 
    return newSize; 
    } 
@end 

если любые запросы комментарии пожалуйста

+1

Установка высоты в '64- [UIApplication sharedApplication] .statusBarFrame.size.height', похоже, работает, но приводит к некоторому заиканию при изменении строки состояния. – jaggedcow

+0

установить высоту на панель навигации не в строке состояния – codercat

+2

Нет, я это понял. Но с использованием фиксированной высоты 64 получается панель навигации высотой 84 пикселя, когда строка состояния не скрыта. Следовательно, нам нужно вычесть высоту строки состояния, чтобы получить согласованный 64px – jaggedcow

2

Вы можете создать контейнер View внутри раскадровки и установить фиксированный Top Space (такой же, как в строке состояния). Тогда вы можете вставить свой NavigationController в этот вид.

Image 1

enter image description here

Image 2

enter image description here

Я надеюсь, что это помогает.

Edit: Добавлено Изображения

+0

Вы имеете в виду встроить UITabBarController? – jaggedcow

+0

Это или определенный UINavigationController. Это зависит от ваших потребностей. Это всего лишь идея, и, возможно, там есть лучшее решение. – NoilPaw

+0

Это оставляет пространство 20 пикселей в нижней части экрана, к сожалению ... – jaggedcow

2

В appDelegate.m - создать навигационный контроллер и установить его на корень вид контроллер

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{  
     UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]]; 


     HomeViewController *homeViewController = (HomeViewController *)[storyboard instantiateViewControllerWithIdentifier:@"HomeViewController"]; 

     self.navigationController = [[UINavigationController alloc] initWithRootViewController:homeViewController]; 

     [self.navigationController setNavigationBarHidden:YES]; 

     self.window.rootViewController = self.navigationController; 

     return YES; 
} 

Тогда вместо навигационной панели вы можете повторно создать навигационную панель с помощью кнопки UIImageView + label + и т. д. ...
Затем вам нужно дать правильную маску авторазмера, чтобы UIImageView настраивает себя правильно
Custom navigationBar

1

Вот модифицированная версия ответа codercat в. Когда строка состояния скрыта, то origin.y навигационной панели равен 0. В этом случае, я поставил его высота до 64. Если строка состояния не спрятался, держать высоту по умолчанию 44.

@implementation UINavigationBar (customNavigationBar) 
- (CGSize)sizeThatFits:(CGSize)size { 
    CGPoint originInWindow = [self.window convertPoint:CGPointZero fromView:self]; 
    CGFloat height = originInWindow.y > 1 ? 44 : 64; 
    return CGSizeMake(self.frame.size.width, height); 
} 
@end 
Смежные вопросы