[Swift] [LayoutConstraints] Unable to simultaneously satisfy constraints.

YoungToMaturity·2022년 3월 10일
1

iOS

목록 보기
11/16

[LayoutConstraints] Unable to simultaneously satisfy constraints. 라는 오류가 작업중인 프로젝트에서 느닷없이 발생했습니다. 이전부터 쭉 있어왔는데 신경쓰지 못하고 있다가 우연히 발견하게 되었습니다. 문제의 해결 자체는 구글링을 통해 쉽게 해결되었으나, 이 문제를 해결하기 위해서 문제를 알아내는 과정(디버깅 과정)이 평소와는 달랐고 인상 깊었기 때문에 기록을 남깁니다.

디버깅 과정

디버깅에 대한 가이드는 여러가지가 있었습니다. 첫번째 사진과 같이 각각의 constraint를 찾는 방식과, 두번째 사진과 같은 디버거를 사용하는 방법이 있었는데, 저는 디버거의 사용을 알아보다 constraints를 하나씩 확인하기로 했습니다. 하지만 SwiftUI를 사용하며, 별도의 constraints를 사용한 경험이 없는 저는 조금 더 오래 걸릴 수 있지만, 첫 화면부터 코드를 한줄씩 주석처리 해가며 에러의 근원지를 찾아보기로 했습니다.

MainView

첫 화면인 MainView에서는 생각보다 간단하게 찾아낼 수 있었습니다. 처음으로 주석처리를 하고 실행한 결과 에러가 사라졌기 때문입니다. 이런 방식으로 하나씩 하나씩 주석처리를 해가며 View별로 확인을 하기로 했습니다.

WorkOutView


다음 화면이었던 WorkOutView에서 위 사진과 같이 하나하나씩 모두 주석 처리를 해보았지만, 똑같은 오류가 계속 발생했습니다. 하지만 아래의 사진과 같이 바꾸고 나니 에러가 사라졌습니다! 잡았다 요놈! 이제 후보는 List.navigationBarTitle() 둘로 압축되었습니다.

먼저 위 사진에서 List만 추가된 상태로 코드를 다시 실행해 보았습니다. 저는 내심 List를 유력 후보로 생각했었는데, 의외로 navigationBarTitle()이 당선되었습니다.

해결 과정

만약 위와 같은 디버깅 과정이 없었다면 구글링을 할 검색어가 "[LayoutConstraints] Unable to simultaneously satisfy constraints."와 같이 에러의 이름 뿐이었을 것입니다. 심지어 해당 검색어를 실제로 검색도 해보았었고, 추가적인 조합들도 검색을 해 보았으나 제대로 된 결과를 얻기에는 어려웠습니다. 하지만 저의 경우, 디버깅 과정을 통해 에러가 발생하는 곳이 navigationBarTitle()이라는 것을 알고 있었고, "navigationBarTitle [LayoutConstraints] Unable to simultaneously satisfy constraints."로 검색한 후 처음으로 나온 Stack Overflow 게시물을 통해 바로 해결했습니다. 비록 조금은 무식한 방식이었지만 디버깅을 통해 문제가 어디서 발생하는지를 찾는 데에 있어서 효과는 확실한 디버깅 방법으로 문제를 더 구체적으로 파악하고 나니 검색에 걸리는 시간이 확 줄었습니다.

profile
iOS Developer

0개의 댓글