Привязка 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *