У меня возникают проблемы с реконфигурированием UINavigationBar
на iOS 7 и 8 при переходе между представлениями.
В моем приложении в настоящее время содержится поток UIViewController
:
VC1 → VC2 → VC3
В этом потоке
- VC1 является домашним экраном и имеет непрозрачный
UINavigationBar
- VC2 имеет полупрозрачный
UINavigationBar
- VC3 возвращается к наличию непрозрачного
UINavigationBar
Проблема, с которой я столкнулся, заключается в том, что переходы между этими представлениями выглядят очень небрежно. Для начала я попробовал следующее:
в VC2
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// configure appearance
[self.navigationController.navigationBar configureTranslucentAppearance];
}
И в VC1 и VC3
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
// configure appearance
[self.navigationController.navigationBar restoreDefaultAppearance];
}
Ниже перечислены реализации двух вспомогательных функций, перечисленных выше:
- (void)restoreDefaultAppearance {
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
[self setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor JTTextNavBar]}];
[self setTintColor:[UIColor JTTextNavBar]];
[self setBarTintColor:[UIColor JTBackgroundNavBarWithAlpha:1.0]];
[self setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault];
[self setBackgroundColor:[UIColor JTBackgroundNavBarWithAlpha:1.0]];
[self setShadowImage:[UIImage navigationBarShadowImage]];
[self setTranslucent:NO];
}
- (void)configureTranslucentAppearance {
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
[self setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
[self setBackgroundColor:[UIColor clearColor]];
[self setShadowImage:[UIImage new]];
[self setTranslucent:YES];
}
Это самый простой способ обработки этого перехода. Он имеет следующие визуальные артефакты:
- При переходе от VC1 → VC2, как только вы начнете переход, панель навигации станет черной. Обычно анимация завершается
- При переходе с VC2 → VC1 навигационная панель мгновенно меняется на цвет приложения по умолчанию, прежде чем время завершения будет завершено.
- При переходе с VC2 → VC3 навигационная панель мгновенно переходит от полупрозрачного к цвету панели навигации приложения, а затем элементы меню и оживляют тело VC.
- При переходе от VC3 → VC2 навигационная панель мгновенно становится черной и остается таким образом, пока не завершится segue.
Ни один из этих переходов не выглядит хорошо. В идеале я бы хотел, чтобы представления плавно переходили вместе с их новым UINavigationBar
, но единственный способ, которым я видел это, - это вручную добавить панель инструментов к каждому xib.
Любые предложения? Извините, если это описание запутывает: (
Изменить: Добавлены обрезанные изображения UINavigationBar
и верхней части UIViewController
для каждого из перечисленных переходов.