Как стать автором
Поиск
Написать публикацию
Обновить

Как масштабировать все элементы экрана в SwiftUI

Всем привет! Меня зовут Сергей Зайцев, и это история боли и страданий в SwiftUI.

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

При использовании функции frame() мы создаем строгое пространство для нашего объекта, которое не зависит от других объектов. Когда мы хотим разместить текстовый элемент от самого края экрана, это может вызвать множество проблем с адаптацией на других экранах.

Я подумал, что было бы круто, если масштабирование происходило автоматически в зависимости от экрана айфона. Так как это сделать?

А на самом деле все просто - нужно просто умножить параметр на коэффициент экрана)

Давайте посмотрим на нашем примере. Возьмем экран iPhone 11 Pro Max с размерами 390 на 896 по фигме/пойнты и сделаем автоматическое масштабирование под iPhone 11 Pro.

Возьмем изначальные размеры нашего фрейма и умножим на коэффициент экрана. То есть мы берем размер экрана, на котором запускаем программу, и нужный нам размер экрана из Figma и делим друг на друга. Как итог - получаем коэффициент масштабирования))

func scaleScreen(_ value : CGFloat) -> CGFloat{
    let x = UIScreen.main.bounds.width/375  
    return value * x
}

func scaleScreen_y(_ value : CGFloat) -> CGFloat{
    let y = UIScreen.main.bounds.height/812
    return value * y
}

Вот пример размеры в пойнтах всех экранов

Можете посмотреть и использовать данное решение тут

Хотите помочь с дополнением - пишите в телегу на @yan1956wwq

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.