-1

I am trying to create a view similar to Facebook so that when you click a button, a view controller covers half the sceeen like this:half view

And then if you swipe up it covers the whole view like this:

full view

How would I go about doing this?

General Grievance
  • 4,555
  • 31
  • 31
  • 45
ayjoy
  • 155
  • 3
  • 10

1 Answers1

2

you should use an container view , and set frame of container view half of the screen height . but you can just use container view in object library xcode. container view is look like view use in your view controller class bellow the class name add this code :

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

in your viewDidLayoutSubviews() function you should set frame of container view like this :

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

now you have a container view that cover half of the screen, then you should add your second view controller to your container view , so you should create a second view controller class programmatically , or you should create a view controller in your xcode storyboard and set storyboard id for that.

for add and remove a child view controller in an container view you can use this functions:

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


}

then you should add your second view controller to your container view with private func addContentContainerView(_ childViewController: UIViewController)

if you make the second programmatically and set you should use this code for use add that in your container in your viewWillLayoutSubviews method like this:

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

but if you make your second view controller in storyboard you should set id for that , select view controller then select identity inspector below identity set Storyboard ID : SecondViewController then instead last viewWillLayoutSubwies , your viewWillLayoutSubviews should like this:

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)

} 

and for scroll that you should add a UIScrollView and set height of that to self.view.frame.height * 1.5

msinamsh
  • 36
  • 2