0

私のビューには、子として2つのテーブルビューコントローラーを持つコンテナーがあります。 ここに画像の説明を入力 私はクラスのこのプロパティとして子を持っています

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でコンテナのサイズを大きくした後、各テーブルビューをコンテナの底に固定したい。

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 に答える