【问题标题】:iOS disable animation for NavigationController back buttoniOS 禁用 NavigationController 后退按钮的动画
【发布时间】:2015-11-05 10:20:40
【问题描述】:

当我在 NavigationController 中使用后退按钮弹出 ViewController 时,我想禁用动画。

我试过了:

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(false)
}

但它仍然有动画。

【问题讨论】:

    标签: ios swift navigationcontroller


    【解决方案1】:

    在您想要拥有该按钮的控制器中:

    override func viewDidLoad() {
        super.viewDidLoad()
        self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .Plain, target: self, action: #selector(backTapped))
    }
    
    @objc func backTapped(sender: UIBarButtonItem) {
        navigationController?.popViewControllerAnimated(false)
    }
    

    考虑到这种方式,您将丢失后退按钮上的

    【讨论】:

    • 然后我没有得到
    • 没错。我不知道是否可以使用
    • 您覆盖了默认按钮,无法保留箭头,在这种情况下,您必须将箭头添加为新按钮的图像。
    • 没错,在我提供的解决方案中,您覆盖了按钮,儿子您丢失了
    • 这种语法在 Swift 3/4 中有所改变。本质上,您需要将操作中的参数更改为#selector(backTapped),并在函数声明之前添加@objc。来源:stackoverflow.com/questions/39205613/…
    【解决方案2】:

    只需在你必须弹出的视图控制器上使用它

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(false)
        UIView.setAnimationsEnabled(false)
    }
    

    或者

    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(false)
        UIView.setAnimationsEnabled(false)
    }
    

    视图动画被完全删除。并且在弹出后不要忘记在您的下一个视图控制器上添加UIView.setAnimationsEnabled(true)

    【讨论】:

      【解决方案3】:

      在哪个 ViewController 中你不想要动画,
      添加以下行

      override func viewWillDisappear(_ animated: Bool) {
          super.viewWillDisappear(animated)
          UIView.setAnimationsEnabled(false)
      }
      override func viewDidDisappear(_ animated: Bool) {
          super.viewWillDisappear(animated)
          UIView.setAnimationsEnabled(true)
      }
      

      【讨论】:

        【解决方案4】:

        如果你想自定义动画,可以试试这个:

        override func viewDidLoad() {
            super.viewDidLoad()
        
        navigationController?.navigationBar.tintColor = UIColor.white
            self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "◁", style: .plain, target: self, action: #selector(backTapped(sender:)))
        
        }
        

        // 带有淡入淡出动画

        @objc func backTapped(sender: UIBarButtonItem) {
            let transition: CATransition = CATransition()
            transition.duration = 0.5
            transition.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeIn)
            transition.type = CATransitionType.fade
            self.navigationController!.view.layer.add(transition, forKey: nil)
            navigationController?.popViewController(animated: false)
          }
        

        //“◁”以这种方式添加:编辑 -> 表情符号和符号

        【讨论】:

          【解决方案5】:

          viewWillDisappear() 不处理动画,它只是。

          如果您使用的是UINavigationController

          self.navigationController?.popViewController(animated: false)
          

          如果你只是使用UIViewController

          self.dismissViewControllerAnimated(false, completion: nil)
          

          【讨论】:

            【解决方案6】:

            你可以试试这个

            override func viewWillDisappear(animated: Bool) {
                self.navigationController?popViewControllerAnimated(false)
            }
            

            【讨论】: