Всем привет! Меня зовут Сергей Зайцев, и это история боли и страданий в 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