Ответ
GeometryReader — это контейнерный view в SwiftUI, который предоставляет своему содержимому информацию о размере и координатах доступного пространства. Он позволяет создавать адаптивные интерфейсы, зависящие от размера родительского контейнера.
Ключевые особенности:
- Принимает замыкание с параметром типа
GeometryProxy. GeometryProxyпредоставляет свойстваsize(доступные размеры) и функциюframe(in:)для определения координат в заданной системе координат.- Сам
GeometryReaderрасширяется, чтобы занять все предложенное ему пространство.
Практический пример:
GeometryReader { geometry in
VStack {
Text("Доступная ширина: (Int(geometry.size.width))")
Rectangle()
.fill(Color.blue)
.frame(width: geometry.size.width * 0.75, // 75% от ширины родителя
height: 100)
}
}
.frame(height: 200) // GeometryReader займет эту высоту и всю доступную ширину.
Важные замечания:
- Производительность: Чрезмерное или вложенное использование
GeometryReaderможет негативно сказаться на производительности, так как вызывает частые пересчеты лэйаута. - Применение: Полезен для создания кастомных лэйаутов, адаптивных сеток, сложных анимаций и позиционирования элементов относительно границ контейнера.