【问题标题】:How to create view controller that covers half the screen programmatically SWIFT如何以编程方式创建覆盖一半屏幕的视图控制器 SWIFT
【发布时间】:2018-03-10 21:38:49
【问题描述】:

我正在尝试创建一个类似于 Facebook 的视图,以便当您单击按钮时,视图控制器会覆盖一半的屏幕,如下所示:

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

我该怎么做呢?

【问题讨论】:

    标签: swift uiviewcontroller programmatically-created programmatically


    【解决方案1】:

    您应该使用容器视图,并将容器视图的框架设置为屏幕高度的一半 .但您可以在对象库 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 故事板中创建一个视图控制器并为此设置故事板 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()
    
    
    }
    

    那么你应该使用私有函数 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,选择视图控制器,然后在身份集故事板 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-19
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 1970-01-01
      相关资源
      最近更新 更多