Ви не описуєте масштаб; ви описуєте відповідність аспекту. (Я відредагував ваше питання з цього приводу.) Підрозділ стає максимально великим, зберігаючи його співвідношення сторін і повністю розміщуючись всередині його батьківського.
У будь-якому випадку це можна зробити за допомогою автоматичного макета. Ви можете це зробити повністю в ІБ від Xcode 5.1. Почнемо з деяких поглядів:
Світло-зелений вигляд має співвідношення сторін 4: 1. Темно-зелений вигляд має співвідношення сторін 1: 4. Я збираюся встановити обмеження, щоб блакитний вигляд заповнював верхню половину екрана, рожевий вигляд заповнював нижню половину екрана, а кожен зелений вид максимально розширювався, зберігаючи його співвідношення сторін і вписуючись у його контейнер.
По-перше, я створять обмеження з усіх чотирьох сторін синього зору. Я зафіксую його до найближчого сусіда на кожному краю, з відстані 0. Я обов'язково вимикаю поля:
Зауважте, що я ще не оновлював кадр. Мені легше залишити місце між видами при встановленні обмежень, а просто встановити константи на 0 (або що завгодно) вручну.
Далі я закріплюю лівий, нижній і правий краї рожевого виду до найближчого сусіда. Мені не потрібно встановлювати обмеження для верхнього краю, оскільки його верхній край уже обмежений до нижнього краю синього виду.
Мені також потрібно обмеження рівних висот між рожевими та блакитними видами. Це змусить їх заповнити половину екрана:
Якщо я скажу Xcode оновити всі кадри зараз, я отримую це:
Тож обмеження, які я встановив поки що, є правильними. Я відміняю це і починаю роботу над світло-зеленим видом.
Зовнішній вигляд світло-зеленого виду вимагає п'яти обмежень:
- Обмеження співвідношення сторін із необхідним пріоритетом на світло-зеленому поданні. Ви можете створити це обмеження у xib або дошці розкадрівання за допомогою Xcode 5.1 або новішої версії.
- Обмеження з необхідним пріоритетом, що обмежує ширину світло-зеленого виду, має бути меншою або рівною ширині її контейнера.
- Обмеження з високим пріоритетом встановлює ширину світло-зеленого виду, рівну ширині його контейнера.
- Обмеження обов'язкового пріоритету, що обмежує висоту світло-зеленого виду, має бути меншою або рівною висоті його контейнера.
- Обмеження з високим пріоритетом встановлює висоту світло-зеленого виду рівну висоті його контейнера.
Розглянемо два обмеження на ширину. Сам по собі обмеження менш рівного обмеження недостатньо для визначення ширини світло-зеленого виду; багато ширини підійдуть до обмеження. Оскільки існує двозначність, авторозмітка спробує вибрати рішення, яке мінімізує помилку в іншому (високий пріоритет, але не потрібно) обмеження. Мінімізація помилки означає ширину максимально наблизити до ширини контейнера, не порушуючи при цьому необхідного обмеження, меншого або рівного.
Те ж саме відбувається і з обмеженням висоти. Оскільки також потрібне обмеження співвідношення сторін, воно може лише максимізувати розмір субпрогляду вздовж однієї осі (якщо випадково контейнер не має того ж співвідношення сторін, що і підпогляд).
Тому спочатку я створюю обмеження співвідношення сторін:
Потім я створюю однакові обмеження по ширині та висоті з контейнером:
Мені потрібно відредагувати ці обмеження, щоб вони були меншими або рівними обмеженнями:
Далі мені потрібно створити ще один набір рівних обмежень по ширині та висоті з контейнером:
І мені потрібно зробити ці нові обмеження меншими за необхідний пріоритет:
Нарешті, ви попросили, щоб підрозділ був зосереджений у його контейнері, тому я встановлю ці обмеження:
Тепер для тестування я виберу контролер перегляду та попрошу Xcode оновити всі кадри. Ось що я отримую:
На жаль! Підрозділ розширився, щоб повністю заповнити його контейнер. Якщо я вибираю його, я можу побачити, що насправді він підтримує співвідношення сторін, але він виконує заповнення аспекту замість відповідності .
Проблема полягає в тому, що для менш обмеженого обмеження має значення, який погляд знаходиться в кожному кінці обмеження, а Xcode встановив обмеження, протилежне моєму очікуванню. Я міг вибрати кожне з двох обмежень і змінити його перший і другий пункти. Натомість я просто виберу підперегляд і зміню обмеження на більші або рівні:
Xcode оновлює макет:
Зараз я все те ж саме роблю до темно-зеленого виду на дні. Мені потрібно переконатися, що його співвідношення сторін дорівнює 1: 4 (Xcode змінив його розмір дивним чином, оскільки у нього не було обмежень). Я більше не показуватиму кроки, оскільки вони однакові. Ось результат:
Тепер я можу запустити його в тренажері iPhone 4S, який має інший розмір екрана, ніж використовуваний ІБ, і тестовим поворотом:
І я можу протестувати в тренажері iPhone 6:
Для зручності я завантажив остаточну розкадровку в цю суть .