По умолчанию компонент 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 ограничит ваше содержимое внутри заданных границ.

Комментарии (2)


  1. fedorro
    30.06.2023 14:03
    +2

    Если хотите про каждое свойство отдельный пост (статьей как-то это трудно назвать) делать то для такого придумали раздел "Посты", там как раз пусто.


    1. Debash Автор
      30.06.2023 14:03

      Хорошо, спасибо за совет =)