[iOS] AutoLayout 기본개념(3)

Youngwoo Lee·2021년 4월 24일
0

iOS

목록 보기
9/46
post-thumbnail

AutoLayout을 설정하다 보면 알 수 없는 에러를 마주칠 때가 많은데, 그런 에러를 잡는 방법에는 어떤 것들이 있는지 한 번 알아보자!!!

에러의 종류

AutoLayout 에러에는 크게 세 가지 종류가 있다

  1. Unsatisfiable Layouts
  2. Ambiguous Layouts
  3. Logical Errors

Unsatisfiable Layouts

Unsatisfiable Layouts은 아래 사진의 우측 상단에서 자주 마주쳐 익숙할 것이다

그럼 이 에러를 예방하려면??

해당 에러는 뷰를 코드를 통해 계층적으로 작성할 때 많이 생기는데,

특히, translatesAutoresizingMasksIntoConstraints 프로퍼티를 false 해주어야 되는데 까먹을 때 이런 경우가 많이 생긴다

그리고,

레이아웃 되어야하는 뷰가 뷰모 뷰의 크기가 너무 작아서 비좁을 때 많이 생긴다

이런 경우는,

높은 우선도를 가지는 Constraint를 활용하거나, 부모 뷰와 자식 뷰들 간의 크기를 예측해서 설계하는 방법이 있다



Ambiguous Layouts

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로 뿌려줌


Logical Errors

사람의 오류 라고 할 수 있다

논리적 계산의 실수로 인해서 생기는 오류로 단순한 버그이지만, 어디서 언제 발생했는지 찾는 것이 굉장히 까다롭다

단계별 지침이나, 방법은 없지만 몇 가지 팁은 있다

  • 기존 Constraints를 검토, 놓치거나 실수로 작성한 것이 있다면 제거한다
  • View frames를 다시 확인한다. 예기치 않게 늘어나거나 줄어들지 않도록 한다
  • resizing의 한 가지 증상은 기준 정렬되어진 View가 더 이상 제대로 정렬되지 않는다는 것이다. 그것은 View가 고유 Contents 높이로 표시될 때만 기준선 정렬이 작동하기 때문이다. View를 수직으로 늘러거나 축소하면 텍스트가 잘못된 위치에 이상하게 나타난다.
  • 컨트롤이 항상 고유한 컨텐츠 크기와 일치해야 하는 경우 매우 높은 콘텐츠 고정 및 압축 저항 우선 순위를 지정해야 한다. example) 999
  • Layout에 대한 가정을 찾고 해당 가정이 사실인지 확인하기 위해서 명시적 제약 조건을 추가해본다
  • 만족스럽지 못한 레이아웃은 일반적으로 찾고 수정하기 가장 쉬운 문제이다. 충돌이 발생할 때까지 제약 조건을 추가한 다음 충돌을 검사하고 해결하자


Debugging Tricks and Tips

Build 도중에 혹은 Debugging 도중에 Log를 활용하는 방법에 대해서 알아보자

이러한 Log를 얻었을 경우 하나씩 해석하고 해결하기는 솔직히 쉬운 과정이 아니다

https://www.wtfautolayout.com

과 같은 사이트를 활용하면 좀 쉽게 로그를 알아볼 수 있는데,

위 처럼 로그를 이미지화 시켜준다

profile
iOS Developer Student

0개의 댓글