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

How to create view controller that covers half the screen programmatically SWIFT

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

然后如果向上滑动它会像这样覆盖整个视图:

我该怎么做?

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

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

现在你有一个覆盖一半屏幕的容器视图, 那么你应该将你的第二个视图控制器添加到你的容器视图中, 所以您应该以编程方式创建第二个视图控制器 class,或者您应该在 xcode 故事板中创建一个视图控制器并为其设置故事板 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)
} 

但是如果你在故事板中创建你的第二个视图控制器,你应该为它设置 id,select 视图控制器然后 select 身份检查器下面的身份设置故事板 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