Карусель SwiftUI, поддерживающая пейджинг (привязка для просмотра при прокрутке)IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Гость
 Карусель SwiftUI, поддерживающая пейджинг (привязка для просмотра при прокрутке)

Сообщение Гость »

Я пытаюсь создать собственное представление карусели с помощью SwiftUI, и мой желаемый результат:
  • Создать представление карусели, поддерживающее непрерывное прокрутка и пейджинг
  • Он должен быть совместим с iOS 15 и 16, поэтому я не могу использовать ScrollTargetBehavior(_:) и ScrollTargetLayout(isEnabled:)
Конечный результат, который мне нужен, похож на это видео:
Верхняя карусель показывает поведение привязки и пейджинга, а нижняя карусель показывает непрерывную прокрутку.
Это код, который у меня есть на данный момент, который дает мне непрерывную прокрутку для всех версий, но только поведение привязки для iOS 17+

Код: Выделить всё

import SwiftUI

struct CarouselView: View {
let content: Content
@State private var currentIndex = 0

private var showsIndicators: Bool
private var spacing: CGFloat
private var offset: CGFloat
private var shouldSnap: Bool

init(showsIndicators: Bool = true,
spacing: CGFloat = 0,
offset: CGFloat = 0,
shouldSnap: Bool = false,
@ViewBuilder content: @escaping () -> Content) {
self.content = content()
self.showsIndicators = showsIndicators
self.spacing = spacing
self.offset = offset
self.shouldSnap = shouldSnap
}

var body: some View {
ScrollView(.horizontal, showsIndicators: showsIndicators) {
LazyHStack(spacing: spacing) {
content
.offset(x: offset)
}
.apply {
$0.apply {
if #available(iOS 17.0, *), shouldSnap {
$0.scrollTargetLayout()
} else {
$0
}
}
}
}
.apply {
if #available(iOS 17.0, *), shouldSnap {
$0.scrollTargetBehavior(.viewAligned)
} else {
$0
}
}
}
}

extension View {
func apply(@ViewBuilder _ block: (Self) -> V) -> V { block(self) }
}
Как я могу поддержать поведение разбиения на страницы для версий под iOS 17?
Я видел некоторые реализации с TabView, и хотя изначально это действительно показал некоторые обещания в том, что он поддерживает привязку/пейджинг, ограничения для меня следующие:
  • Он показывает только 1 просмотр за раз, мне нужно иметь возможность чтобы показать следующий элемент
  • Я хочу иметь возможность настраивать расстояние между текущим элементом и следующим
Могу ли я добиться этого, не углубляясь в UIKit и CollectionView?


Подробнее здесь: https://stackoverflow.com/questions/784 ... -on-scroll
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»