스케일 투 핏을 설명하지 않습니다. 당신은 종횡비를 설명하고 있습니다. (이 점에서 귀하의 질문을 편집했습니다.) 종횡비를 유지하고 부모 내부에 완전히 들어가면서 하위 뷰가 최대한 커집니다.
어쨌든 자동 레이아웃 으로이 작업을 수행 할 수 있습니다. Xcode 5.1부터 IB에서 완전히 수행 할 수 있습니다. 몇 가지 견해부터 시작해 보자.
연한 녹색 화면의 종횡비는 4 : 1입니다. 짙은 녹색 뷰의 종횡비는 1 : 4입니다. 파란색보기가 화면의 절반을 채우고 분홍색보기가 화면의 아래쪽 절반을 채우고 각 녹색보기가 가로 세로 비율을 유지하면서 화면 크기에 맞게 최대한 확장되도록 제약 조건을 설정하려고합니다. 컨테이너.
먼저 파란색 뷰의 네면 모두에 구속 조건을 작성합니다. 거리를 0으로하여 각 가장자리에서 가장 가까운 이웃에 고정합니다. 여백을 해제해야합니다.
내가 참고 하지 않습니다 아직 프레임을 업데이트합니다. 제약 조건을 설정할 때 뷰 사이에 공간을 두는 것이 더 쉽고 상수를 0 (또는 무엇이든)으로 직접 설정하면됩니다.
다음으로 분홍색보기의 왼쪽, 아래쪽 및 오른쪽 가장자리를 가장 가까운 이웃에 고정시킵니다. 상단 가장자리가 이미 파란색보기의 하단 가장자리로 제한되어 있기 때문에 상단 가장자리 제약 조건을 설정할 필요가 없습니다.
또한 분홍색과 파란색보기 사이의 동일한 높이 제약이 필요합니다. 이렇게하면 각각 화면의 절반을 채 웁니다.
Xcode에 모든 프레임을 업데이트하도록 지시하면 다음과 같이됩니다.
그래서 지금까지 설정 한 제약 조건이 맞습니다. 나는 그것을 취소하고 밝은 녹색보기에서 작업을 시작합니다.
연한 녹색 뷰를 화면에 맞추려면 다음과 같은 다섯 가지 제약 조건이 필요합니다.
- 연두색보기에 필요한 우선 순위 종횡비 제약 조건. Xcode 5.1 이상이있는 xib 또는 스토리 보드에서이 제한 조건을 작성할 수 있습니다.
- 연한 녹색 뷰의 너비를 컨테이너 너비보다 작거나 같게 제한하는 데 필요한 우선 순위 제약 조건입니다.
- 밝은 초록색보기의 너비를 컨테이너 너비와 동일하게 설정하는 우선 순위가 높은 제한 조건입니다.
- 밝은 초록색보기의 높이를 컨테이너의 높이보다 작거나 같게 제한하는 필수 우선 순위 제약 조건입니다.
- 밝은 초록색보기의 높이를 컨테이너의 높이와 동일하게 설정하는 우선 순위가 높은 제한 조건입니다.
두 가지 너비 제약 조건을 고려해 봅시다. 동일하지 않은 구속 조건만으로는 연두색 시야의 폭을 결정하기에 충분하지 않습니다. 많은 너비가 구속 조건에 맞습니다. 모호성이 있기 때문에 자동 레이아웃은 다른 (높은 우선 순위는 아니지만 필수) 제약 조건의 오류를 최소화하는 솔루션을 선택하려고합니다. 오류를 최소화한다는 것은 필요한 너비를 같거나 적은 제약 조건을 위반하지 않으면 서 컨테이너 너비에 최대한 가깝게 만드는 것을 의미합니다.
높이 제약 조건에서도 마찬가지입니다. 또한 종횡비 제약이 필요하기 때문에 컨테이너가 서브 뷰와 동일한 종횡비를 가지지 않는 한 하나의 축을 따라 서브 뷰의 크기 만 최대화 할 수 있습니다.
먼저 가로 세로 비율 제약 조건을 만듭니다.
그런 다음 컨테이너와 동일한 너비 및 높이 제약 조건을 만듭니다.
이 구속 조건을 동일하거나 덜 구속 조건으로 편집해야합니다.
다음으로 컨테이너와 동일한 너비 및 높이 제약 조건 세트를 만들어야합니다.
그리고 이러한 새로운 제약 조건을 필요한 우선 순위보다 작게 만들어야합니다.
마지막으로 하위 뷰를 컨테이너의 중앙에 배치하도록 요청 했으므로 이러한 제약 조건을 설정하겠습니다.
이제 테스트하기 위해 뷰 컨트롤러를 선택하고 Xcode에 모든 프레임을 업데이트하도록 요청합니다. 이것이 내가 얻는 것입니다 :
죄송합니다! 하위 뷰가 컨테이너를 완전히 채우도록 확장되었습니다. 선택하면 가로 세로 비율이 유지되지만 가로 세로 맞춤 대신 가로 세로 채우기 를하고 있음을 알 수 있습니다.
문제는 동일하지 않은 제약 조건에서 제약 조건의 각 끝에있는 뷰가 중요하며 Xcode가 내 기대와 반대되는 제약 조건을 설정했다는 것입니다. 두 가지 제약 조건을 각각 선택하고 첫 번째 항목과 두 번째 항목을 되돌릴 수 있습니다. 대신, 하위 뷰를 선택하고 제약 조건을보다 크거나 같게 변경하면됩니다.
Xcode는 레이아웃을 업데이트합니다 :
이제 바닥의 짙은 녹색으로 동일한 작업을 수행합니다. 가로 세로 비율이 1 : 4인지 확인해야합니다 (Xcode는 제약이 없으므로 이상한 방식으로 크기를 조정했습니다). 단계가 동일하므로 단계를 다시 표시하지 않습니다. 결과는 다음과 같습니다.
이제 IB와 다른 화면 크기를 가진 iPhone 4S 시뮬레이터에서 실행하고 회전을 테스트 할 수 있습니다.
그리고 iPhone 6 시뮬레이터에서 테스트 할 수 있습니다.
편의를 위해 최종 스토리 보드를 이 요지 에 업로드했습니다 .