如何添加约束以将tableview固定到其父底部

时间:2017-11-13 14:16:24

标签: ios swift snapkit

我的视图中有一个容器,有两个tableview控制器作为孩子。 enter image description here 我在课堂上将孩子作为这个属性

lazy var photoFeedVC: UserPicsTableViewController = self.makeAndAddVC()
    lazy var postFeedVC: PostFeedVC = self.makeAndAddVC()

制作孩子的功能

func makeAndAddVC<T: UIViewController>() -> T {
        let vc = T()
        self.addChildViewController(vc)
        return vc
    }

我希望在viewDidAppear中增加容器的大小后,将每个tableview修复到其容器底部。

photoFeedVC.tableView.snp.makeConstraints({(make) -> Void in
        make.bottom.equalTo(containerView)
    })
    postFeedVC.tableView.snp.makeConstraints({ make -> Void in
        make.bottom.equalTo(self.view)
    })

这是一个反对尝试修复到底部,但xcode给了我这个错误

  

***由于未捕获的异常'NSGenericException'而终止应用程序,原因:'无法使用锚点激活约束    和      因为他们没有共同的祖先。约束或其约束   锚点引用不同视图层次结构中的项目?那是   非法'。

这里是增加容器的方法

override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(true)
        print("aparecio la vista")
        containerView.frame.size.height += 150
        self.feed.frame.size.height += 150.0
        self.photoFeedVC.tableView.frame.size.height += 150.0
        self.postFeedVC.tableView.frame.size.height += 150
        self.scrollView.contentSize.height = containerView.height + 10
        self.scrollView.layoutIfNeeded()
    }

1 个答案:

答案 0 :(得分:1)

有问题的错误消息是说您要固定2个不在同一层次结构中的视图。您在某个地方错过了addSubview()电话(虽然我无法确切地说出哪里,因为似乎有很多子视图控制器而且我不确定层次结构 看起来像。)

您还同时进行帧数学和自动布局,除非在极少数情况下,这不是您想要的。如果您想使用自动布局,则应修改约束以扩展容器,而不是调整任何内容frame.height