在导航控制器中,当我推入/弹出视图控制器时,有没有办法停止导航栏上的titleView动画?每个屏幕的titleView都相同(应用程序的标志)。
目前,当我推入一个视图时,导航栏上的titleView也会随着视图滑动。
在导航控制器中,当我推入/弹出视图控制器时,有没有办法停止导航栏上的titleView动画?每个屏幕的titleView都相同(应用程序的标志)。
目前,当我推入一个视图时,导航栏上的titleView也会随着视图滑动。
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];
- (void)viewDidLoad
{
self.navigationItem.title=@"";
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
}
Swift
一个可行的解决方案是:
使用 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()
}
}
}