Когда я касаюсь карточки, чтобы развернуть ее (открывая больше содержимого), расширенная карточка часто автоматически прокручивается из поля зрения.
Это отличается от того, как раньше вел себя UITableView, где при расширении ячейки нажимаемая ячейка оставалась видимой и настраивалось содержимое вокруг нее.
Ожидаемое поведение
Когда карточка развернута, он должен оставаться видимым (или в основном видимым) на экране.
Фактическое поведение
После расширения SwiftUI пересчитывает макет, и развернутая карточка уходит из поля зрения из-за сохранения смещения прокрутки.
Код: Выделить всё
import SwiftUI
struct ContentView: View {
struct Item: Identifiable {
let id = UUID()
let title: String
}
let items = (1...30).map { Item(title: "Item \($0)") }
@State private var expandedID: UUID?
var body: some View {
ScrollView {
LazyVStack(spacing: 12) {
ForEach(items) { item in
ExpandableCard(
item: item,
isExpanded: expandedID == item.id,
onTap: {
withAnimation {
expandedID = item.id
}
}
)
.id(item.id)
}
}
.padding()
}
}
}
struct ExpandableCard: View {
let item: ContentView.Item
let isExpanded: Bool
let onTap: () -> Void
var body: some View {
VStack(alignment: .leading, spacing: 8) {
Button(action: onTap) {
Text(item.title)
.font(.headline)
}
if isExpanded {
ForEach(0..Есть ли лучший подход в iOS 17+ (например, .scrollPosition)?
Или это известное ограничение ScrollView + LazyVStack?
Подробнее здесь: [url]https://stackoverflow.com/questions/79854313/swiftui-scrollview-lazyvstack-expanding-a-cell-causes-it-to-scroll-out-of-vie[/url]
Мобильная версия