如何创建以编程方式覆盖屏幕一半的视图控制器SWIFT

时间:2018-03-10 21:38:50

标签: swift uiviewcontroller programmatically-created programmatically

我正在尝试创建一个类似于Facebook的视图,以便当您单击按钮时,视图控制器会覆盖这样的一半:half view

然后,如果你向上滑动它会覆盖整个视图:

full view

我将如何做到这一点?

1 个答案:

答案 0 :(得分:2)

您应该使用容器视图,并将容器视图的框架设置为屏幕高度的一半 。但你可以在对象库xcode中使用容器视图。 容器视图看起来像视图使用在视图控制器类中,类名称添加此代码:

  class YourViewController: UIViewController {
  // MARK: Properties
  let containerView = UIView() 

在viewDidLayoutSubviews()函数中,您应该像这样设置容器视图的框架:

override func viewWillLayoutSubviews() {
containerView.frame = CGRect(x: 0, y: self.view.frame.midY, width: self.view.frame.width, height: self.view.frame.height / 2)
 let yourSecondViewController = YourSecondViewController()
    addContentContainerView(yourSecondViewController)
} 

现在你有一个覆盖屏幕一半的容器视图, 然后你应该将第二个视图控制器添加到容器视图中, 所以你应该以编程方式创建第二个视图控制器类,或者你应该在你的xcode故事板中创建一个视图控制器并为它设置storyboard id。

用于在容器视图中添加和删除子视图控制器,您可以使用此功能:

    private func addContentContainerView(_ childViewController: UIViewController) {


    childViewController.willMove(toParentViewController: self)
    containerView.addSubview(childViewController.view)

    self.addChildViewController(childViewController)
    childViewController.didMove(toParentViewController: self)

}
private func removeContentContainerView(_ childViewController: UIViewController) {
    childViewController.didMove(toParentViewController: nil)
    childViewController.view.removeFromSuperview()
    childViewController.removeFromParentViewController()


}

然后你应该使用private func addContentContainerView(_ childViewController:UIViewController)将你的第二个视图控制器添加到容器视图中

如果以编程方式进行第二次设置并设置应该使用此代码,请在viewWillLayoutSubviews方法中添加容器,如下所示:

override func viewWillLayoutSubviews() {
containerView.frame = CGRect(x: 0, y: self.view.frame.midY, width:      self.view.frame.width, height: self.view.frame.height / 2)
let yourSecondViewController = YourSecondViewController()
addContentContainerView(yourSecondViewController)
} 

但如果您在storyboard中创建第二个视图控制器,则应为其设置id,选择视图控制器,然后在标识集下面选择身份检查器故事板ID:SecondViewController 然后改为上一次viewWillLayoutSubwies,你的viewWillLayoutSubviews应该是这样的:

override func viewWillLayoutSubviews() {
containerView.frame = CGRect(x: 0, y: self.view.frame.midY, width:      self.view.frame.width, height: self.view.frame.height / 2)
 let mainStoryBoard = UIStoryboard(name: "Main", bundle: nil)
  let yourSecondViewController = mainStoryBoard.instantiateViewController(withIdentifier: "SecondViewController")
addContentContainerView(yourSecondViewController)

} 

并且对于滚动,你应该添加一个UIScrollView并将其高度设置为self.view.frame.height * 1.5