ios - 在没有 Storyboard的情况下以编程方式添加容器 View ?

标签 ios swift xcode7 uicontainerview

我的 viewDidLoad 中有这个:

    let childViewControllerForPosts = PostsCollectionViewController(collectionViewLayout: UICollectionViewLayout())
    let cView = childViewControllerForPosts.view
    self.view.backgroundColor = UIColor.redColor()
    self.addChildViewController(childViewControllerForPosts)
    self.view.addSubview(cView)
    childViewControllerForPosts.didMoveToParentViewController(self)

    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(handleScroll(_:)), name: "cvScrolled", object: nil)

    cView.widthAnchor.constraintEqualToConstant(view.frame.size.width).active = true
    cView.heightAnchor.constraintEqualToConstant(view.frame.size.height).active = true
    cView.topAnchor.constraintEqualToAnchor(containerForGreyAndPurple.bottomAnchor).active = true
    cView.centerXAnchor.constraintEqualToAnchor(view.centerXAnchor).active = true

但是,我收到一条错误消息,指出这是一个非法约束,因为它没有共同的祖先 :(

这是错误:

...因为他们没有共同的祖先。约束是否引用不同 View 层次结构中的项目?这是非法的。”

最佳答案

您设置的约束不正确。

您需要先为父 View 和容器 View 添加约束,然后您还需要为您的容器 Controller 添加约束。 最后你应该在设置所有约束的最后添加 didMoveToParent。

例子如下,你可以在你的情况下做类似的事情。

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


  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)

Use autolayout to set dynamic UIView to match container view

关于ios - 在没有 Storyboard的情况下以编程方式添加容器 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38936475/

相关文章:

ios - 禁用按钮时 UIButton 标题消失

ios - 以编程方式在 Swift 中获取键盘框架

ios - iOS 应用程序的用户界面似乎因未知原因而被放大

swift - Swift 代码语法问题

ios - 一个 TableViewController 中的多个 UIPickerView 以编程方式

ios - 将核心数据应用程序迁移到 iCloud

ios - JSONDecoder无法解码Array但可以解码String

ios - 如何使用 Swift 3 从 YouTube channel 打印视频标题列表?

ios - 如何在 Xcode 7 beta 4 中调用 SecItemCopyMatching?

ios - swift : Adding an action to an array of buttons