[iOS 오토레이아웃 가이드] Advanced Auto Layout - Changing Constraints 제약조건을 변경하는 것은 constraint equqation을 바꾸는 작업입니다. 다음과 같은 동작이 제약조건을 바꿉니다. - 제약조건은 활성화 하거나 비활성화- 제약조건의 constant value 변경- 제약조건의 우선순위 변경- 뷰를 뷰 계층구조에서 삭제하는 것 ( 뷰를 제거하면 뷰와 관련된 모든 제약조건이 제거되므로)- 컨트롤러나 뷰의 속성을 변경하는 것- 뷰 구조를 변경하는 것 이렇게 제약조건에 변화가 일어나면 시스템은 'deferred layout pass'예약합니다. 일반적으로 이러한 변화를 언제든 만들 수 있습니다. 이상적으로 대부분의 제약조건은 IB상에서 설정을 끝내거나 코드를 ..
[iOS 오토레이아웃 가이드] Advanced Auto Layout - Working with Scroll Views스크롤뷰를 사용할 때 기본적으로 스크롤뷰 frame의 위치와 사이즈 그리고 스크롤뷰 안에 들가는 content view의 사이즈를 다 정의해야 합니다. 스크롤뷰를 지원하기 위해서 auto layout engine은 제약조건을 다르게 해석합니다. 제약조건이 어디에 있는지 에 따라서 - 다른 뷰와 마찬가지로 스크롤 뷰와 스크롤 뷰 밖에 있는 뷰간의 제약조건은 스크롤뷰 frame에 제약조건이 걸립니다. - 스크롤뷰와 스크롤뷰 안에 들어가는 서브뷰들은 속성에 따라 달라집니다. - 스크롤뷰의 edges 나 margins에 제약조건을 걸면 스크롤뷰의 content area에 걸립니다. - 높이, 너비..
[iOS 오토레이아웃 가이드] Advanced Auto Layout - Working with Self-Sizing Table View cells오토레이아웃으로 table view cell의 높이를 지정할 수 있습니다. 이는 기본적으로 돼 있지 않아서 추가적으로 코드를 적어줘야 합니다. 기본적으로 table view cell의 높이는 table view delegate method 중의 하나인 tableview:heightForRowAtIndexpath 메소드가 정합니다. cell 높이가 유동적으로 변하게 하기 위해서는 다음과 같이 해줘야 합니다. tableView.estimatedRowHeight = 85.0tableView.rowHeight = UITableViewAutomaticDimension 그..
[iOS 오토레이아웃 가이드] Advanced Auto Layout - Size Class specific Layout스토리보드에서는 기본적으로 szie class를 사용합니다. 사이즈 클래스는 scene이나 view같은 UI elements에 할당된 특성입니다. 이는 element 사이즈를 대략적으로 나타냅니다. 사이즈 클래스마다 다양한 값을 지정할 수 있습니다.사이즈 클래스가 바뀔 때마다 layout이 자동으로 바뀝니다. 사이즈 클래스에서 할 수 있는 것은 다음과 같습니다. - view나 control을 나타나게 하거나 없애거나- 제약조건은 나타나게 하거나 없애거나- 폰트나 layout margin 같은 뷰의 속성을 다양하게 시스템이 scene을 로드하면 뷰, 컨트롤, 제약조건들을 인스턴스화 하고 적..
[iOS 오토레이아웃 가이드] Advanced Auto Layout - Programmatically Creating Constraints코드로 오토리아웃을 구현하는 방법은 3가지 입니다. Layout AnchorsView의 다양한 Anchor들을 가지고 하는 방식입니다. topAnchor, bottomAnchor, heightAnchor등이 있습니다. topAnchor는 뷰의 top edge를 가리킵니다.https://developer.apple.com/documentation/uikit/uiview - Creating Constraints Using Layout Anchors 보시면 모든 anchors가 나와있습니다. 3개 방법 중 가독성이 좋다고 생각합니다. apple 문서에 나와있는 예제를 보도록..
[iOS 오토레이아웃 가이드] Debugging Auto Layout - Debugging Tricks and TipsUnderstanding the LogsView의 제약조건에 관한 정보는 콘솔에 출력됩니다. unsatisfiable layout이 있거나 constraintAffectingLayoutForAxix(Orientation)을 썼을 때 콘솔에 출력됩니다. 다음은 예입니다.2015-08-26 14:27:54.790 Auto Layout Cookbook[10040:1906606] Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you do..
[iOS 오토레이아웃 가이드] Debugging Auto Layout - Logical ErrorsLogical Error에 도움 될만한 의견들...- 현재 존재하는 제약조건들을 살펴보기. 어떤 제약조건도 놓치진 않았는지 혹은 예기치 않게 원하지 않는 제약조건이 추가됐는지 확인하기. 뒤로가기나 drag and drop할 때 많이 생김 그러니 제약조건이 정확한 뷰와 속성에 추가됐는지 확인하기 - 뷰 프레임 확인하기. 백그라운드 확인하기. Show layout rectangles켜서 확인 가능 혹은 컬러 주기. 특히 레이블이나 버튼처럼 text를 가진 뷰들의 baseline으로 정렬할 경우 해당 뷰가 intrinsic content height를 가지고 있는 지 확인하기 intrinsic content he..
[iOS 오토레이아웃 가이드] Debugging Auto Layout - Ambiguous Layoutsambiguous layouts은 auto layout engine이 두 개 이상의 유효한 솔루션을 가질 때 발생합니다. 크게 두 가지 원이이 있습니다. - 오토레이아웃은 뷰의 사이즈와 위치를 지정하는 유일한 제약조건이 필요합니다. 보통 뷰의 방향에 2개 정도- 우선순위가 같은 제약조건 여러 개가 충돌 하면 발생 Detetcting Ambiguous layoutsunsatisfiable가 마찬가지로 IB가 해결한 방법을 알려주기는 합니다. 하지만 여러분이 원하는 솔루션을 제공하는 것은 드믈고 콘솔에 경고도 없습니다. ambiguous layout은 breakpoint걸 방법이 없습니다. 그 결과 찾아내..