iOS禁用NavigationController后退按钮的动画

时间:2015-11-05 10:20:41

标签: ios swift navigationcontroller

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

我试过了:

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

但它仍然是动画。

6 个答案:

答案 0 :(得分:4)

在想要拥有该按钮的Controller中:

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationItem.leftBarButtonItem = UIBarButtonItem(title: "Back", style: .Plain, target: self, action: "backTapped:")
}

func backTapped(sender: UIBarButtonItem) {
    navigationController?.popViewControllerAnimated(false)
}

考虑到这种方式,你将失去<后退按钮上的图标(因为您覆盖了该按钮)。但是,我认为不可能有自定义行为和<同时显示图标(除非您自己将<图标添加为图像)

答案 1 :(得分:1)

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

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

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

用于查看的动画已完全删除。弹出后,别忘了在您的下一个ViewController上添加UIView.setAnimationsEnabled(true)

答案 2 :(得分:0)

viewWillDisappear()无法处理动画,只是。

如果您正在使用UINavigationController

self.navigationController?popViewControllerAnimated(false)

如果您只是使用UIViewController

self.dismissViewControllerAnimated(false, completion: nil)

答案 3 :(得分:0)

如果您要自定义动画,请尝试以下操作:

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)
  }

//“◁”这样添加:编辑->表情符号和符号

答案 4 :(得分:0)

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

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

答案 5 :(得分:-2)

你可以试试这个

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