Привязка ScrollView к страницам и дочерним представлениям

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

В SwiftUI компонент ScrollView по умолчанию двигается плавно, но с использованием модификаторов scrollTargetLayout() и scrollTargetBehavior() мы можем сделать так, чтобы он автоматически "привязывался" к определенным дочерним представлениям или целым страницам.

Поместим в качестве примера 10 скругленных прямоугольников в горизонтальный ScrollView, каждый из которых будет целевым при скроллинге. Поскольку .scrollTargetBehavior() установлен как .viewAligned, SwiftUI автоматически будет "привязываться" к каждому из скругленных прямоугольников:

struct ContentView: View {
    var body: some View {
        ScrollView(.horizontal) {
            LazyHStack {
                ForEach(0..<10) { index in
                    RoundedRectangle(cornerRadius: 25)
                        .fill(Color(hue: Double(index) / 10, saturation: 1, brightness: 1).gradient)
                        .frame(width: 300, height: 100)
                }
            }
            .scrollTargetLayout()
        }
        .scrollTargetBehavior(.viewAligned)
        .safeAreaPadding(.horizontal, 40)
    }
}

При использовании модификатора scrollTargetLayout(), все элементы внутри контейнера становятся целями прокрутки, к которым ScrollView может "привязываться". Если необходимо, чтобы прокрутка "привязывалась" только к определенным дочерним представлениям, то вместо scrollTargetLayout() нужно использовать модификатор scrollTarget(), который используется для отдельных элементов.

Есть и альтернативный режим привязки прокрутки — .paging. Этот режим позволяет ScrollView перемещаться ровно на ширину или высоту экрана, в зависимости от направления прокрутки:

ScrollView {
    ForEach(0..<50) { index in
        Text("Item \(index)")
            .font(.largeTitle)
            .frame(maxWidth: .infinity)
            .frame(height: 200)
            .background(.blue)
            .foregroundStyle(.white)
            .clipShape(.rect(cornerRadius: 20))
    }
}
.scrollTargetBehavior(.paging)

Здесь создается ScrollView, содержащий 50 элементов типа Text, каждый из которых заполняет полную ширину экрана. С помощью модификатора .scrollTargetBehavior(.paging) обеспечивается прокрутка ровно на один экран при каждом движении:

Первоисточник

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


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

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

В SwiftUI компонент ScrollView автоматически начинает прокрутку сверху. Однако если вы хотите создать интерфейс, аналогичный приложению "Сообщения" от Apple, вы можете настроить ScrollView так, чтобы ...
При создании различных типов прокручиваемых пользовательских интерфейсов очень часто требуется наблюдать за текущей позицией прокрутки (или смещением содержимого, как это называет UIScrollVi...
В данной статье хочу поделиться подходом, который использую для выполнения действий в определенные моменты жизненного цикла компонентов. Сам по себе подход не новый, но в...
Вышел релиз GitLab 13.5 со сканированием безопасности мобильных приложений, вики-страницами групп, общим реестром пакетов и многими другими классными фичами! Читать дальше &...
С тех пор как в 2018 году был представлен BERT, исследования в области обработки естественного языка охвачены новой парадигмой: использованием больших объемов существующего текста для пре...