ios – 如何以编程方式添加容器视图

前端之家收集整理的这篇文章主要介绍了ios – 如何以编程方式添加容器视图前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
容器视图可以通过界面编辑器轻松添加到故事板中.添加时,容器视图是占位符视图,嵌入段和(子)视图控制器.

但是,我无法找到一种以编程方式添加Container View的方法.其实我甚至不能找到一个名为UIContainerView的类.

容器视图类的名称肯定是一个好的开始.一个完整的指南,包括segue将不胜感激.

我知道View Controller编程指南,但我不认为它与Interface Builder对于Container Viewer的方式相同.例如,当约束被正确设置时,(子)视图将适应容器视图中的大小变化.

解决方法

故事板“容器视图”只是一个标准的UIView对象.没有特殊的“容器视图”类型.实际上,如果您查看视图层次结构,可以看到“容器视图”是标准的UIView:

为了以编程方式实现这一点,您使用“视图控制器控制”:

>通过在storyboard对象上调用instantiateViewControllerWithIdentifier实例化子视图控制器.
>在父视图控制器中调用addChildViewController.
>使用addSubview将视图控制器的视图添加到视图层次结构中(并根据需要设置框架或约束).
>在子视图控制器上调用didMoveToParentViewController方法,将引用传递给父视图控制器.

请参阅07控制器编程指南中的Implementing a Container View ControllerUIViewController Class Reference的“实现容器视图控制器”部分.

例如,它可能看起来像:

override func viewDidLoad() {
    super.viewDidLoad()

    let controller = storyboard!.instantiateViewControllerWithIdentifier("Second")
    addChildViewController(controller)
    controller.view.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(controller.view)

    NSLayoutConstraint.activateConstraints([
        controller.view.leadingAnchor.constraintEqualToAnchor(view.leadingAnchor,constant: 10),controller.view.trailingAnchor.constraintEqualToAnchor(view.trailingAnchor,constant: -10),controller.view.topAnchor.constraintEqualToAnchor(view.topAnchor,controller.view.bottomAnchor.constraintEqualToAnchor(view.bottomAnchor,constant: -10)
    ])

    controller.didMoveToParentViewController(self)
}

请注意,上述实际上并没有向层次结构添加“容器视图”.如果你想这样做,你会做一些像:

override func viewDidLoad() {
    super.viewDidLoad()

    // add container

    let containerView = UIView()
    containerView.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(containerView)
    NSLayoutConstraint.activateConstraints([
        containerView.leadingAnchor.constraintEqualToAnchor(view.leadingAnchor,containerView.trailingAnchor.constraintEqualToAnchor(view.trailingAnchor,containerView.topAnchor.constraintEqualToAnchor(view.topAnchor,containerView.bottomAnchor.constraintEqualToAnchor(view.bottomAnchor,])

    // add child view controller view to container

    let controller = storyboard!.instantiateViewControllerWithIdentifier("Second")
    addChildViewController(controller)
    controller.view.translatesAutoresizingMaskIntoConstraints = false
    containerView.addSubview(controller.view)

    NSLayoutConstraint.activateConstraints([
        controller.view.leadingAnchor.constraintEqualToAnchor(containerView.leadingAnchor),controller.view.trailingAnchor.constraintEqualToAnchor(containerView.trailingAnchor),controller.view.topAnchor.constraintEqualToAnchor(containerView.topAnchor),controller.view.bottomAnchor.constraintEqualToAnchor(containerView.bottomAnchor)
    ])

    controller.didMoveToParentViewController(self)
}

后一种模式非常有用,如果在不同子视图控制器之间进行转换,并且您只想确保一个孩子的视图位于同一位置,并且之前的子视图(即所有唯一的位置约束都由容器视图指定,而不是每次都需要重建这些约束).但是,如果只是执行简单的视图控制,则对这个单独的容器视图的需求不那么引人注目.

猜你在找的iOS相关文章