AutoLayout을 설정하다 보면 알 수 없는 에러를 마주칠 때가 많은데, 그런 에러를 잡는 방법에는 어떤 것들이 있는지 한 번 알아보자!!!
AutoLayout 에러에는 크게 세 가지 종류가 있다
Unsatisfiable Layouts
은 아래 사진의 우측 상단에서 자주 마주쳐 익숙할 것이다
그럼 이 에러를 예방하려면??
해당 에러는 뷰를 코드를 통해 계층적으로 작성할 때 많이 생기는데,
특히, translatesAutoresizingMasksIntoConstraints
프로퍼티를 false 해주어야 되는데 까먹을 때 이런 경우가 많이 생긴다
그리고,
레이아웃 되어야하는 뷰가 뷰모 뷰의 크기가 너무 작아서 비좁을 때 많이 생긴다
이런 경우는,
높은 우선도를 가지는 Constraint를 활용하거나, 부모 뷰와 자식 뷰들 간의 크기를 예측해서 설계하는 방법이 있다
Detetcting Ambiguous layouts
뷰를 보여줄 수 있는 경우의 수가 여러 가지일때, 애매한 Layout이라는 에러가 발생한다
AutoLayout 작업 과정에서 가장 많이 생기는 에러인데,
이럴 경우 lldb
를 활용하면 debug
과정이 굉장히 빠르고 효율적이다
lldb
의 경우
위 처럼 코드라인에 breakPoint를 걸고 run 실행을 시키면
debug 창에 lldb
가 실행된다
hasAmbiuousLayout
: iOS & OS X 다 가능, 잘못 위치한 뷰에서 호출, ambiguous한 View이면 true 반환exerciseAmbiguityInLayout
: iOS & OS X 다 가능, ambiguous Layout을 가진 뷰에서 실행하면 가능한 유용한 솔루션을 하나씩 보여준다constraintsAffectingLayoutForAxis
: iOS에서만 가능, 뷰의 축과 관련된 제약조건 리턴constraintsAffectingLayoutForOrientation
: OS X 에서만 가능, 뷰의 축과 관련된 제약조건 리턴_autolayoutTract
: iOS가능, 뷰에서 실행하면 이 뷰를 포함한 전체 뷰 계층에 관해서 검사한 정보를 계층적으로 생긴 Text로 뿌려줌사람의 오류
라고 할 수 있다
논리적 계산의 실수로 인해서 생기는 오류로 단순한 버그이지만, 어디서 언제 발생했는지 찾는 것이 굉장히 까다롭다
단계별 지침이나, 방법은 없지만 몇 가지 팁은 있다
Build 도중에 혹은 Debugging 도중에 Log를 활용하는 방법에 대해서 알아보자
이러한 Log를 얻었을 경우 하나씩 해석하고 해결하기는 솔직히 쉬운 과정이 아니다
과 같은 사이트를 활용하면 좀 쉽게 로그를 알아볼 수 있는데,
위 처럼 로그를 이미지화 시켜준다