Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/118.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从导航控制器到视图控制器的快速自定义展开序列_Ios_Swift_Uiviewcontroller_Uinavigationcontroller_Uinavigationbar - Fatal编程技术网

Ios 从导航控制器到视图控制器的快速自定义展开序列

Ios 从导航控制器到视图控制器的快速自定义展开序列,ios,swift,uiviewcontroller,uinavigationcontroller,uinavigationbar,Ios,Swift,Uiviewcontroller,Uinavigationcontroller,Uinavigationbar,我有两个控制器: 第一视图控制器(1) 嵌入导航控制器(2a)中的第二视图控制器(2) (1)->(2a-2) 和VC之间的自定义序列导航: 正常的客户服务。从1点到2点 展开自定义展开序列。从2到1 当我使用普通segue时: 第二个控制器(包括导航栏!!!)从右侧推第一个控制器 当我使用unwind segue时: 第一个控制器将第二个控制器(不带导航栏!!!仅查看导航控制器内部)推到右侧。导航栏很粘!导航完成后,导航栏消失 如何使用导航栏推送视图控制器 我的代码: class Cu

我有两个控制器:

  • 第一视图控制器(1)
  • 嵌入导航控制器(2a)中的第二视图控制器(2)
(1)->(2a-2)

和VC之间的自定义序列导航:

  • 正常的客户服务。从1点到2点
  • 展开自定义展开序列。从2到1
当我使用普通segue时: 第二个控制器(包括导航栏!!!)从右侧推第一个控制器

当我使用unwind segue时: 第一个控制器将第二个控制器(不带导航栏!!!仅查看导航控制器内部)推到右侧。导航栏很粘!导航完成后,导航栏消失

如何使用导航栏推送视图控制器

我的代码:

class CustomSegue: UIStoryboardSegue {

    override func perform() {

        let toViewController: UIViewController = self.destinationViewController as! UIViewController
        let fromViewController: UIViewController = self.sourceViewController as! UIViewController

        let containerView: UIView? = fromViewController.view.superview
        let screenBounds: CGRect = UIScreen.mainScreen().bounds

        let finalToFrame: CGRect = screenBounds
        let finalFromFrame: CGRect = CGRectOffset(finalToFrame, -screenBounds.size.width, 0)

        toViewController.view.frame = CGRectOffset(finalToFrame, screenBounds.size.width, 0)
        containerView?.addSubview(toViewController.view)

        UIView.animateWithDuration(0.5, animations: {

            toViewController.view.frame = finalToFrame
            fromViewController.view.frame = finalFromFrame

            }, completion: { finished in
                let fromVC: UIViewController = self.sourceViewController as! UIViewController
                let toVC: UIViewController = self.destinationViewController as! UIViewController
                fromVC.presentViewController(toVC, animated: false, completion: nil)
        })
    }
}

class CustomUnwindSegue: UIStoryboardSegue {

    override func perform() {

        let toViewController: UIViewController = self.destinationViewController as! UIViewController
        let fromViewController: UIViewController = self.sourceViewController as! UIViewController

        let containerView: UIView? = fromViewController.view.superview
        let screenBounds: CGRect = UIScreen.mainScreen().bounds

        let finalToFrame: CGRect = screenBounds
        let finalFromFrame: CGRect = CGRectOffset(finalToFrame, screenBounds.size.width, 0)

        toViewController.view.frame = CGRectOffset(finalToFrame, -screenBounds.size.width, 0)
        containerView?.addSubview(toViewController.view)

       UIView.animateWithDuration(0.5, animations: {

            toViewController.view.frame = finalToFrame
            fromViewController.view.frame = finalFromFrame

            }, completion: { finished in
                let fromVC: UIViewController = self.sourceViewController as! UIViewController
                let toVC: UIViewController = self.destinationViewController as! UIViewController
                fromVC.dismissViewControllerAnimated(false, completion: nil)
        })
    }
}

在前进序列中,您正在从VC1设置动画到VC2a,这将是该序列的目标。在中为VC2a设置动画也会使VC2出现,因为VC2a将其显示为其视图的一部分。因此,UINavigationBar和VC2都会滑入

在反向序列中,将从VC2设置动画到VC1。VC2的
视图
没有覆盖整个屏幕,因为有些视图被UINavigationBar占用。将VC2的视图设置为侧面动画,并将其替换为VC1,完成此操作后,
dismissViewControllerAnimated
,这会导致VC2a在没有动画的情况下消失

您需要再次设置VC2a视图的动画,而不是在反向序列中设置VC2视图的动画。这应该随身携带VC2。我没有尝试过此代码,但类似于以下内容:

   UIView.animateWithDuration(0.5, animations: {
        toViewController.view.frame = finalToFrame
        VC2a.view.frame = finalFromFrame
   }