Предотвращение UINavigationController от настройки источника, когда строка состояния скрыта в iOS 7
У меня есть серия UINavigationControllers
внутри контроллера UITabBar
. Я хочу скрыть строку состояния. Однако, когда я это делаю, панель навигации приспосабливается к сокращению:
Изображение проблемы
![enter image description here]()
Как я могу предотвратить это и получить что-то вроде изображения ниже?
желаемый результат
![enter image description here]()
В настоящее время я просто скрываю строку состояния с помощью [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
Ответы
Ответ 1
Создайте пользовательский UINavigationBar с настраиваемым размеромThatFits.
@implementation UINavigationBar (customNavigationBar)
- (CGSize)sizeThatFits:(CGSize)size {
CGSize newSize = CGSizeMake(self.frame.size.width,64);
return newSize;
}
@end
если какие-либо запросы комментариев PLS
Ответ 2
Вы можете создать Container View внутри своей раскадровки и установить фиксированное верхнее пространство (такое же, как строка состояния). Затем вы можете вставить свой NavigationController
в этот вид.
Изображение 1
![enter image description here]()
Изображение 2
![enter image description here]()
Надеюсь, это поможет.
Изменить: Добавленные изображения
Ответ 3
В 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]()
Ответ 4
Вот измененная версия ответа на кодеркарт. Когда строка состояния скрыта, строка 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