Как остановить анимацию заголовка UINavigationBar во время push-перехода
Есть ли способ остановить titleView на UINavigationBar для анимации, когда я нажимаю / выскакиваю контроллеры представления. TitleView для каждого экрана одинаков (логотип приложения).
В настоящее время, когда я нажимаю на представление, titleView на панели навигации также скользит вместе с представлением.
4 ответа
Установите заголовок элемента навигации в каждом контроллере представления на пустую строку и добавьте UILabel
Подвид на панель навигации:
UILabel *titleLabel = [[UILabel alloc] initWithFrame:self.navigationController.navigationBar.bounds];
titleLabel.font = [UIFont fontWithName:@"Avenir-Roman"
size:20.f];
titleLabel.text = @"TEST TITLE";
titleLabel.textAlignment = NSTextAlignmentCenter;
[self.navigationController.navigationBar addSubview:titleLabel];
Это должно дать вам статический заголовок, который не перемещается при переключении между контроллерами представления.
Пытаться,
[self.navigationController pushViewController:viewController animated:NO];
стриж
Возможное решение:
использование UINavigationController
делегировать методы, чтобы узнать, когда отображается UIViewController. Затем для каждого UIViewController необходимо создать логическую переменную, такую как isInitialized
свойство, которое поможет вам определить, когда UIViewController помещается в стек или когда он отображается на задней панели следующего контроллера представления.
Ваш FirstViewController
:
func navigationController(_ navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
if viewController == self {
if self.isInitialized {
var navigationBarAnimation = CATransition()
navigationBarAnimation.duration = 1.5
navigationBarAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
navigationBarAnimation.type = kCATransitionFade
navigationBarAnimation.subtype = kCATransitionFade
navigationBarAnimation.removedOnCompletion = true
self.navigationController?.navigationBar?.layer?.addAnimation(navigationBarAnimation, forKey: nil)
}
else
{
self.isInitialized = true;
}
}
}
func navigationController(_ navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) {
if viewController == self {
if self.isInitialized {
self.navigationController?.navigationBar?.layer?.removeAllAnimations()
}
}
}
Ваш SecondViewController
:
func navigationController(_ navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
if viewController == self {
if !self.isInitialized {
var navigationBarAnimation = CATransition()
navigationBarAnimation.duration = 1.5
navigationBarAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseIn)
navigationBarAnimation.type = kCATransitionFade
navigationBarAnimation.subtype = kCATransitionFade
navigationBarAnimation.removedOnCompletion = true
self.navigationController?.navigationBar?.layer?.addAnimation(navigationBarAnimation, forKey: nil)
self.isInitialized = true;
}
}
}
func navigationController(_ navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) {
if viewController == self {
if self.isInitialized {
self.navigationController?.navigationBar?.layer?.removeAllAnimations()
}
}
}
- (void)viewDidLoad
{
self.navigationItem.title=@"";
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}