0Pricing
Swift Academy · Урок

GeometryReader для адаптивных макетов

Считывайте геометрию родительского представления, чтобы создавать пропорциональные интерфейсы для разных устройств.

«GeometryReader для адаптивных макетов» — бесплатный урок Swift Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Swift Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Swift Academy содержит 4 уроков всего.

Добро пожаловать

`GeometryReader` считывает доступный размер от родительского представления, позволяя создавать компоновки, пропорциональные размерам экрана или контейнера.

Базовое использование

```swift GeometryReader { geo in Text("Width: \(Int(geo.size.width))") .frame(width: geo.size.width * 0.8) } ```

Свойства GeometryProxy

`GeometryProxy` предоставляет: • `size: CGSize` — доступные ширина и высота • `safeAreaInsets: EdgeInsets` — безопасная область системы • `frame(in:)` — рамку в заданном координатном пространстве

Пропорциональное изменение размера

```swift GeometryReader { geo in HStack(spacing: 0) { Color.blue.frame(width: geo.size.width * 0.6) Color.green } } ```

Координатные пространства

```swift GeometryReader { outer in VStack { GeometryReader { inner in let f = inner.frame(in: .named("outer")) Text("y: \(Int(f.minY))") } } } .coordinateSpace(name: "outer") ```

Безопасная область

```swift GeometryReader { geo in VStack { Spacer() Text("Bottom safe: \(Int(geo.safeAreaInsets.bottom))") .padding(.bottom, geo.safeAreaInsets.bottom) } } ```

Эффект параллакс-прокрутки

```swift ScrollView { ForEach(items) { item in GeometryReader { geo in let offset = geo.frame(in: .global).minY Image(item.image).offset(y: offset * 0.3) } } } ```

PreferenceKeys для передачи данных о компоновке

```swift struct HeightKey: PreferenceKey { static var defaultValue: CGFloat = 0 static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) { value = max(value, nextValue()) } } ``` Используйте их, чтобы передавать размеры дочерних представлений вверх по иерархии представлений.

Когда следует избегать GeometryReader

`GeometryReader` по умолчанию заполняет всё доступное пространство — при неосторожном использовании он может нарушить компоновку. По возможности предпочитайте `.frame(maxWidth:.infinity)` и гибкие стеки.

Альтернатива: протокол компоновки

В Swift 5.7+ появился протокол `Layout`, позволяющий создавать полностью настраиваемые алгоритмы компоновки без накладных расходов GeometryReader.

Быстрая проверка

Что содержит `GeometryProxy.size`?

Итоги

Основные выводы: • `GeometryReader { geo in }` считывает размер, предложенный родительским представлением • `geo.size` — ширина и высота; `geo.safeAreaInsets` — системные внутренние отступы • `frame(in:)` — положение в именованном или глобальном координатном пространстве • Используйте PreferenceKeys для передачи размеров вверх по иерархии • По возможности предпочитайте гибкие компоновки вместо GeometryReader Курс завершён! Далее: поток данных SwiftUI.

Часто задаваемые вопросы

Урок «GeometryReader для адаптивных макетов» бесплатный?

Да — полный текст урока «GeometryReader для адаптивных макетов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Swift Academy, подпишись на CoddyKit PRO. Курс Swift Academy содержит 4 уроков всего.

Чему я научусь в уроке «GeometryReader для адаптивных макетов»?

Считывайте геометрию родительского представления, чтобы создавать пропорциональные интерфейсы для разных устройств. Ты практикуешь Swift Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Swift Academy?

Предыдущий опыт не требуется. Swift Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «GeometryReader для адаптивных макетов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Swift Academy?

Да. Каждый урок Swift Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы VStack, HStack и ZStack
  2. LazyVGrid и LazyHGrid
  3. Модификаторы Spacer, Padding и Frame
  4. GeometryReader для адаптивных макетов
← Назад к Swift Academy