오토레이아웃 오토레이아웃은 뷰계층에 포함된 모든 뷰들의 사이즈와 위치를 각 뷰들에 설정되어 있는 제약사항들을 기반으로 즉시 계산한다. 예를 들면, 버튼을 이미지뷰의 가로 중앙에 놓고, 이미지뷰 아래쪽 8포인트로 제약을 설정해 두면, 이미지뷰의 사이즈와 위치가 변경될 경우, 버튼의 위치가 자동으로 제약사항에 맞게 프레임이 조정된다. 이러한 제약사항을 통해 내부적, 외부적 변경 사항에 따른 `동적으로 변경되는 UI`를 작성할 수 있다.
1 2 3 4
Understanding Auto Layout Auto Layout dynamically calculates the size and position of all the views in your view hierarchy, based on constraints placed on those views. For example, you can constrain a button so that it is horizontally centered with an Image view and so that the button’s top edge always remains 8 points below the image’s bottom. If the image view’s size or position changes, the button’s position automatically adjusts to match.
This constraint-based approach to design allows you to build user interfaces that dynamically respond to both internal and external changes.
외부적 변화 - 윈도우 크기 조절 (OS X). - 유저가 iPad 상에서 Split View 진입 혹은 나갈 경우 (iOS). - 기기 회전시 (iOS). - 전화 혹은 오디오 레코딩 바가 생기거나 사라질 경우 (iOS). - 별도의 사이즈 클래스 지원시. - 멀티 해상도 지원시.
1 2 3 4 5 6 7
External Changes - The user resizes the window (OS X). - The user enters or leaves Split View on an iPad (iOS). - The device rotates (iOS). - The active call and audio recording bars appear or disappear (iOS). - You want to support different size classes. - You want to support different screen sizes.
내부적 변화 - 앱내 뷰 계층에 들어갈 텍스트 혹은 이미지와 같은 컨텐츠에 변화가 생길 경우 - 로컬화에 따른 변화 - 첫번째, 언어에 따라 뷰들의 크기가 달라짐. - 두번째, 날짜,숫자,통화 등의 경우 지역별로 표현방식이 달라 뷰들의 크기가 달라짐. - 세번째, 언어에 따라 배치 방향이 다름 (`English` left-to-right / `Arabic` right-to-left) - 앱 실행중 폰트가 Dynamic Type 의 경우
1 2 3 4
Internal Changes - The content displayed by the app changes. - The app supports internationalization. - The app supports Dynamic Type (iOS).
개략적인 오토레이 아웃에 대한 내용은 위와 같다. 보다 더 자세한 사항은 애플의 도큐먼트를 참조하면 된다.
아래는 두 가지 레이아웃 방식이다. 좌측이 제약사항 없이 사용하던 프레임 레이아웃 방식이고, 우측이 제약사항 레이아웃 방식이다.
UITableView 를 사용하는데 있어서, 그동안 코딩으로 가변형 처리를 해왔다. 그러나, 이번에 UITableViewCell 의 AutoLayout을 이용하면 보다 편리하게 처리할 수 있다는 것을 알게 되어 몇글자 적어본다. 모든 시작에 앞어, AutoLayout 에 대해서 먼저 짚고 넘어간다.
여러가지 서버 스택이 있겠지만, 그 중 해보고 싶었던 MEAN Stack 을 응용하여 API 서버를 작성하였다. 내가 작업할 MENS Stack 은 다음과 같다.
M (MongoDB) : NoSQL 데이터베이스이다. 도큐먼트 기반의 데이터베이스로, JSON 형태의 스킴을 작성할 것이다. E (Express.js) : 미들 웨어 작성을 위해 사용할 프레임웍이다. N (Node.js) : Javascript 기반의 서버사이드 언어이다. S (Socket.io) : 실시간 서버에서 사용할 웹소켓이다.