【问题标题】:How to stop UINavigationBar title from animating while push transition如何在推送转换时阻止 UINavigationBar 标题动画
【发布时间】:2014-05-05 06:59:55
【问题描述】:

当我推/弹出视图控制器时,有什么方法可以停止 UINavigationBar 上的 titleView 动画。每个屏幕的 TitleView 都是相同的(应用程序的徽标)。

目前当我推送视图时,导航栏上的titleView也会随着视图滑动。

【问题讨论】:

  • 添加您的其他视图传递代码。
  • 使用 UINavigationController 代替 UINavigationBar。

标签: ios objective-c xcode uinavigationbar navigationbar


【解决方案1】:

试试,

[self.navigationController pushViewController:viewController animated:NO];

【讨论】:

  • NKB,这也会阻止视图控制器之间的推送动画。
  • 是的,它会,但由于按钮动画是由 UINavigationController 处理的,这是一种方式。
  • 如果你想处理它,另一种选择是覆盖 pushViewController 方法并修改代码。类似于这里的代码hanspinckaers.com/…
【解决方案2】:
- (void)viewDidLoad
{
    self.navigationItem.title=@"";

    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}

【讨论】:

    【解决方案3】:

    将每个视图控制器中导航项的标题设置为空字符串,并将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];
    

    这应该会给你一个在视图控制器之间切换时不会移动的静态标题。

    【讨论】:

      【解决方案4】:

      斯威夫特

      一个可行的解决方案是:

      使用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()
                  }
              }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-05
        • 2020-02-14
        相关资源
        最近更新 更多