Wenn ich auf eine Karte tippe, um sie zu erweitern (wodurch mehr Inhalt angezeigt wird), scrollt die erweiterte Karte oft automatisch aus der Ansicht.
Das fühlt sich anders an als früher, als UITableView sich verhielt, wo das Erweitern einer Zelle die angetippte Zelle sichtbar ließ und den Inhalt um sie herum anpasste.
Erwartetes Verhalten
Wenn eine Karte erweitert wird, Es sollte auf dem Bildschirm sichtbar (oder größtenteils sichtbar) bleiben.
Tatsächliches Verhalten
Nach der Erweiterung berechnet SwiftUI das Layout neu und die erweiterte Karte wird nicht mehr angezeigt, da der Scroll-Offset erhalten bleibt.
Code: Select all
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..
Mobile version