Разработка
Размещение UI-компонентов в пределах отступов Safe Area
По умолчанию SwiftUI гарантирует, что представления будут размещены в этой безопасной области, чтобы сохранить видимость и доступность. Однако бывают случаи, когда разработчикам требуется больше контроля над тем, как представления взаимодействуют с этими границами.
Безопасная область (safe area) — это часть экрана, которую не загораживают элементы системного UI, такие как строка состояния, панель навигации, динамический остров и пр.
По умолчанию SwiftUI гарантирует, что представления будут размещены в этой безопасной области, чтобы сохранить видимость и доступность. Однако бывают случаи, когда разработчикам требуется больше контроля над тем, как представления взаимодействуют с этими границами.
Отступы Safe Area позволяют разработчикам настраивать позиционирование и подгонку представлений относительно безопасной области. Например, они могут создать кастомную панель навигации, простирающуюся до верхнего края экрана, или расположить оверлеи, как всплывающие подсказки, всплывающие окна и плавающие кнопки.
Модификатор safeAreaInset(edge:alignment:spacing:content:)
позволяет нам вставлять дополнительное содержимое даже используя указанные пространства безопасной области представления. Нам необходимо указать следующие свойства:
edge
: указывает край безопасной области представления (например,.top
,.bottom
,.leading
или.trailing
).alignment
: необязательно и определяет, как будет выровнено вставленное содержимое.spacing
: опционально и добавляет интервал между вставленным содержимым и основным содержимым.content
: замыкание, которое возвращает вид, который вы хотите вставить в это пространство безопасной области.
import SwiftUI
struct ContentView: View {
var body: some View {
ZStack {
LinearGradient(colors: [.blue, .purple], startPoint: .top, endPoint: .bottom)
.ignoresSafeArea()
VStack(spacing: 20) {
Text("Safe Area Insets Example")
.font(.title)
.fontWeight(.bold)
.foregroundColor(.white)
}
}
.safeAreaPadding(.top, 64.0)
.safeAreaInset(edge: .top, spacing: 0) {
safeAreaComponent(text: "Top Bar", symbolName: "globe")
}
.safeAreaInset(edge: .bottom, spacing: 0) {
safeAreaComponent(text: "Bottom Bar", symbolName: "star.fill")
}
}
func safeAreaComponent(text: String, symbolName: String) -> some View {
HStack {
Text(text)
.foregroundColor(.white)
Image(systemName: symbol)
.foregroundColor(.yellow)
}
.frame(maxWidth: .infinity)
.padding()
.background(Color.black.opacity(0.3))
}
}
Прикрепив модификатор safeAreaInset(edge:alignment:spacing:content:)
к контейнеру View
, в частности к ZStack
, мы можем расположить элементы пользовательского интерфейса в нужной области Safe Area.
Кроме того, мы можем использовать модификатор safeAreaPadding(_:_:)
для корректировки безопасной области на заданную величину, либо по всем краям, либо по выбранному подмножеству.
xxxxxxxxxx
import SwiftUI
struct ContentView: View {
var body: some View {
ZStack {
LinearGradient(colors: [.blue, .purple], startPoint: .top, endPoint: .bottom)
.ignoresSafeArea()
VStack(spacing: 20) {
Text("Safe Area Insets Example")
.font(.title)
.fontWeight(.bold)
.foregroundColor(.white)
}
}
.safeAreaPadding(.bottom, 80.0)
.safeAreaInset(edge: .top, spacing: 0) { ... }
.safeAreaInset(edge: .bottom, spacing: 0) { ... }
}
}
-
Программирование4 недели назад
Конец программирования в том виде, в котором мы его знаем
-
Видео и подкасты для разработчиков1 неделя назад
Как устроена мобильная архитектура. Интервью с тех. лидером юнита «Mobile Architecture» из AvitoTech
-
Магазины приложений3 недели назад
Магазин игр Aptoide запустился на iOS в Европе
-
Новости3 недели назад
Видео и подкасты о мобильной разработке 2025.8