0

我的视图中有一个容器,其中有两个 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()
    }
4

1 回答 1

1

有问题的错误消息是说您正在固定 2 个不在同一层次结构中的视图。你在addSubview()某处错过了一个电话(虽然我不能确切地说出在哪里,因为似乎有很多子视图控制器,我不确定层次结构应该是什么样子)。

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

于 2017-11-13T14:21:47.260 回答