Установка отступов для содержимого или индикаторов прокрутки в ScrollView

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

По умолчанию компонент ScrollView в SwiftUI позволяет своему содержимому заполнять все доступное пространство, а индикаторы прокрутки аккуратно располагаются на краю экрана. Однако, с помощью модификатора contentMargins() можно установить отступы для содержимого или полос прокрутки - насколько угодно большие и по любым краям.

В качестве примера, рассмотрим код, который вносит отступ в содержимое области прокрутки на 50 поинтов с каждой стороны, не меняя при этом положение индикаторов прокрутки:

ScrollView {
    ForEach(0..<50) { index in
        Text("Item \(index)")
            .frame(maxWidth: .infinity)
            .foregroundStyle(.white)
            .background(.blue)
    }
}
.contentMargins(50, for: .scrollContent)

Если вы хотите задать отступ только для некоторых сторон, вы можете указать либо одно значение, либо набор опций на ваш выбор. В приведенном ниже примере содержимое отступает на 150 пунктов только от верхнего края:

ScrollView {
    ForEach(0..<50) { index in
        Text("Item \(index)")
            .frame(maxWidth: .infinity)
            .background(.blue)
            .foregroundStyle(.white)
    }
}
.contentMargins(.top, 150, for: .scrollContent)

Таким же образом вы можете отрегулировать величину отступа для индикаторов прокрутки ScrollView, либо самостоятельно, либо вместе с регулировкой величины отступа содержимого.

Как и ранее, вы можете настроить все стороны сразу или выбрать только те, которые вам нужны. Так, в следующем примере добавляется отступ в 100 поинтов сверху для индикатора прокрутки, в то время как остальные стороны остаются без изменений:

ScrollView {
    ForEach(0..<50) { index in
        Text("Item \(index)")
            .frame(maxWidth: .infinity)
            .background(.blue)
            .foregroundStyle(.white)
    }
}
.contentMargins(.top, 100, for: .scrollIndicators)

Использование отступов для содержимого (content margins) вместо простого padding (внутренний отступ) позволяет вашему содержимому прокручиваться от края до края при взаимодействии пользователя с ним, при этом добавляя немного дополнительного пространства для прокрутки - это гораздо более удачная опция, чем простой padding.

В контексте SwiftUI, padding относится к внутреннему отступу вокруг содержимого представления, что влияет на его размер и положение внутри его родительского представления. С другой стороны, отступы содержимого или content margins относятся к пространству, которое оставляется вокруг содержимого области прокрутки. Это пространство позволяет содержимому прокручиваться "от края до края", давая дополнительное пространство для взаимодействия с прокруткой.

Таким образом, использование отступов для содержимого может быть более предпочтительным, если вы хотите, чтобы ваше содержимое прокручивалось за края экрана, в то время как простой padding ограничит ваше содержимое внутри заданных границ.

Источник: https://habr.com/ru/articles/745130/


Интересные статьи

Интересные статьи

Почтовый сервер Carbonio состоит из множества разных служб и приложений, которые тесно интегрированы друг с другом и позволяют пользователю эффективно работать с почтой, календарями, адресными книгами...
В этом руководстве мы научимся устанавливать PostgreSQL с помощью Docker. Обычно мы запускаем контейнер Docker, используя публичный образ Docker, или берём предварительно настроенные Docker-образы с...
Это заключительная часть цикла статей, посвященного интеграции одноплатных компьютеров Raspberry Pi 4 в наши дата-центры. Мы рассмотрели, что происходит при загрузке «малинки» с момента включения до...
Эта статья является первой в серии статей по стеку Elasticsearch, Logstash, Kibana (ELK). Цикл статей ориентирован на тех, кто только начинает знакомится со стеком ELK, ...
Здравствуйте, в данной статье разбирается процесс установки и запуска приложения RTKRCV из открытой библиотеки RTKLIB, разрабатываемой командой Томоджи Такасу (Япония). RTKLIB — э...