Что такое GeometryReader в SwiftUI?

«Что такое GeometryReader в SwiftUI?» — вопрос из категории SwiftUI, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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 может негативно сказаться на производительности, так как вызывает частые пересчеты лэйаута.
  • Применение: Полезен для создания кастомных лэйаутов, адаптивных сеток, сложных анимаций и позиционирования элементов относительно границ контейнера.