UIImagePickerController的相机视图在导航回

时间:2017-06-30 01:23:40

标签: ios swift uinavigationcontroller uinavigationbar uiimagepickercontroller

在使用相机拍摄图像时UIImagePickerController的委托中,另一个视图被推送到导航堆栈:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    picker.pushViewController(otherViewController, animated: true)
}

otherViewController导航栏可见:

override func viewDidLoad() {
    super.viewDidLoad()
    navigationController?.setNavigationBarHidden(false, animated: false) 
}

点击导航栏中的< Back按钮后,导航栏再次变为不可见,出现摄像机视图,但摄像机图像冻结,点击底栏按钮无效。

为什么?

2 个答案:

答案 0 :(得分:1)

解决方法是不要让用户通过用Back按钮替换Cancel按钮来导航回来。这解散了UIImagePickerController并自动关闭导航堆栈上的所有更高视图,包括otherViewController

// Replace `Back` button with `Cancel` button in the `otherViewController`
navigationItem.leftBarButtonItem = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: #selector(self.cancelButtonTapped))

@objc func cancelButtonTapped() {

   // Dismiss the `UINavigationController`, e.g. by calling a delegate function
   // ...
}

因此,用户必须从头开始再次启动流程,而不是仅仅导航回来。

答案 1 :(得分:0)

你在解雇你提出的选择器之前直接推动一个新的视图这就是为什么当你回来时你的相机图像选择器仍然在堆栈中因为它没有被解雇

dismiss(animated:true, completion: nil)

在此之后推送您的新视图。 didFInish用于获取结果并解除您使用的选择器传递图像选择或点击新控制器(如果需要)但需要解雇选择器