Таким образом, чтобы определить дополнительный интервал для краевых вставок, на всех видах есть свойство, называемое safeAreaInsets
.Это можно использовать для определения необходимости добавления дополнительных значений к параметрам макета (сверху / снизу или слева / справа).
Таким образом, чтобы получить «дополнительные поля», вы можете проверить верхнюю /нижнее значение этой вставки, если приложение находится в портретной ориентации, или значение «влево / вправо» для вставок, если приложение находится в альбомной ориентации.
С одной вещью, с которой следует быть осторожным, эта safeAreaInset
устанавливаетсяпо умолчанию в корневом представлении контроллера, поэтому если в качестве подпредставления добавлено настраиваемое представление, то в этом настраиваемом представлении, скорее всего, не будет правильно установлено это свойство.
И, если быть более точным, в вашем случае«рамочный» код будет выглядеть примерно так:
if deviceIsInPortrait {
let frame = CGRect(x:thisX,
y: -90 - self.view.safeAreaInsets.top // this will be 0 for non "notch" phones
width: myWidth
height: myHeight
}
else {
let frame = CGRect(x:thisX,
y: -90 - self.view.safeAreaInsets.left // this will be 0 for non "notch" phones
width: myWidth
height: myHeight
}
Также еще один совет: используйте авторазметку как можно чаще.