Задача из книги Modern Auto Layout


#1

Всем привет!
Изучаю книгу Modern Auto Layout и застрял на одной задаче, уже много вариантов перепробовал, но безуспешно. Надо создать зеленое вью, которое должно быть квадратным и в центре экрана, оно должно быть как можно больше, оставаясь при этом полностью на экране. Для iPhone в портретном виде квадрат такой же широкий, как и экран. В альбомной ориентации он такой же высокий, как высота экрана:

  1. Создать этот макет можно с помощью Interface Builder или в коде. (я стараюсь сделать в коде, но даже в storyboard не получается)

  2. Тестирование на различных устройствах, от самого маленького iPhone SE до более крупных iPad. Убедитесь, что зеленый вид остается квадратным, расположенным по центру вида и максимально большим, полностью помещаясь на экране.

Подсказки И Советы

  1. Для этой компоновки необходимо использовать комбинацию неравенства и дополнительных ограничений.

  2. Начните с описания положения зеленого вида, сделайте зеленый вид квадратом, а затем работайте над шириной и высотой.

  3. Помните, что когда что-то в нашем макете должно быть правдой, это обязательное ограничение. Когда мы хотим что-то как можно ближе, это необязательное ограничение.

  4. Сделайте зеленый вид квадратом, придав ему равной ширину и высоту.

  5. Представьте себе площадь, расширяющуюся от центра. Ширина никогда не должна быть больше ширины корневого вида. Высота никогда не должна быть больше высоты корневого вида.

  6. Ограничений на неравенство недостаточно, чтобы зафиксировать высоту или ширину зеленого вида. Вам нужно добавить зависимость, которая тянет ширину или высоту как можно ближе к ширине или высоте корневого вида, не нарушая других зависимостей.

  7. Вы можете решить эту проблему с помощью 5 обязательных ограничений (2 из которых равны) и 1 дополнительного ограничения.

Буду рад любой подсказке или решению, хочу понять все же принцип как это сделать и двигаться дальше.


#2

Самое основное

let screenSize = UIScreen.main.bounds.size
let squareSize = min(screenSize.width, screenSize.height)

#3

Мда, все оказалось на много проще чем я думал. Спасибо большое)