[Swift, UIKit] Unable to activate constraint with anchors because they have no common ancestor.

개요

Unable to activate constraint with anchors 블리블라 and 블라블라라 because they have no common ancestor. Does the constraint or its anchors reference items in different view hierarchies? That’s illegal. 문제 해결 방법







문제 발생

UIViewController 내부 프로퍼티로 UICollectionView를 선언한 뒤

viewDidLoad에서 UICollectionView의 각 4개의 Anchor를 UIViewController의 각 4개의 Anchor로 걸어준 뒤 런타임 에러가 발생







문제 해결 방법

방법 1

구글링을 검색해서 얻을 수 있는 가장 주된 해결 방식은 레이아웃을 지정하려는 view가 UIViewController의 view의 subView로 지정되지 않고 레이아웃을 조정하려고 할 때 발생하는 문제로서,

레이아웃 이전에 해당 뷰가 UIViewController의 subview로 지정되어야 함.

이 문제는 거의 이 방법으로 해결 가능




예시

override func viewDidLoad() {
    self.view.addSubview(어떤 )

    어떤 .topAnchor.constraints(equalTo: view.topAnchor).isActive = true
}







방법 2

문제가 된 코드 문제가 된 코드

방법 1의 문제로 해결되지 않는 경우 (필자의 경우)

UIViewController의 view에 추가하려는 view가 정상적인 view의 상태가 아님.

간결한 코드를 위해 생성과 동시해 커스텀 초기화를 하는 방법으로 코드를 작성 중,

일부 코드가 누럭이 되어 view가 computed property(getter)가 되어버려 subview로의 추가가 정상적으로 이루어지지 않음.

view의 선언을 다시 체크해 수정해보자!

문제를 수정한 코드 수정된 코드