티스토리 뷰

[iOS 오토레이아웃 가이드] Debugging Auto Layout - Ambiguous Layouts

ambiguous layouts은 auto layout engine이 두 개 이상의 유효한 솔루션을 가질 때 발생합니다. 크게 두 가지 원이이 있습니다.

- 오토레이아웃은 뷰의 사이즈와 위치를 지정하는 유일한 제약조건이 필요합니다. 보통 뷰의 방향에 2개 정도
- 우선순위가 같은 제약조건 여러 개가 충돌 하면 발생


Detetcting Ambiguous layouts

unsatisfiable가 마찬가지로 IB가 해결한 방법을 알려주기는 합니다. 하지만 여러분이 원하는 솔루션을 제공하는 것은 드믈고 콘솔에 경고도 없습니다. ambiguous layout은 breakpoint걸 방법이 없습니다. 그 결과 찾아내기 힘듭니다. 

그래서 아래와 같은 함수가 있습니다. 아래 함수들은 오직 디버깅 할 때만 가능합니다. 여러분이 접근하고 싶은 뷰계층에 breakpoint를 걸고 콘솔에서 호출하세요.

- hasAmbiguousLayout : iOS & OSX 다 가능, 잘못 위치한 뷰에서 호출, ambiguous 이면 true반환
- exerciseAmbiguityInLayout : iOS & OXS 다 가능. ambiguous layout을 가진 뷰에서 실행하면 가능한 유요한 솔루션들 하나씩 보여준다
- constraintsAffectingLayoutForAxis : iOS에서만 가능, 뷰의 축과 관련된 제약조건 리턴
- constraintsAffectingLayoutForOrientation : OXS에서만 가능, 뷰의 축과 관련된 제약조건 리턴
- _autolayoutTract : iOS가능, 뷰에서 실행하면 이 뷰를 포함한 전체 뷰 계층에 관해서 검사한 정보를 계층적으로 생긴 Text로 뿌려줌

콘솔에서 Objective-C 스타일로 작성해야 함 
[self.myView exerciseAmbiguityInLayout]
[self.myView autolayoutTract]

그리고 이 작업을 하기 전에 IB상에서 나타나는 ambiguous 제약조건을 고치세요. 그렇지 않으면 IB에서 자동으로 수정할 겁니다. 그러면 디버깅이 잘 안 됩니다,




반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함