我的视图中有一个容器,有两个tableview控制器作为孩子。 我在课堂上将孩子作为这个属性
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()
}
答案 0 :(得分:1)
有问题的错误消息是说您要固定2个不在同一层次结构中的视图。您在某个地方错过了addSubview()
电话(虽然我无法确切地说出哪里,因为似乎有很多子视图控制器而且我不确定层次结构 看起来像。)
您还同时进行帧数学和自动布局,除非在极少数情况下,这不是您想要的。如果您想使用自动布局,则应修改约束以扩展容器,而不是调整任何内容frame.height
。