Da das Thema vielleicht etwas umfangreicher wird, mache ich hierfür mal einen extra Thread auf. Folgendes Problem: Im angehängten minimalen Testcase wird eine Liste erzeugt und beim Hinzufügen eines Eintrags, soll jeweils zum Ende der Liste gescrollt werden. In iOS 15 klappt das wunderbar, in iOS 16 bekommen ich beim
Um der Frage vorzugreifen: Ja, ich möchte hier lieber
Hier der Quellcode. Vielleicht hat ja einer noch eine Idee, wo das Problem liegen können und wie man es in iOS 16 umgehen kann.
Alles anzeigen
PS: Mit einem Button in einer festen Liste zu einer Zeile zu springen, wie es hier beschrieben ist, funktioniert auch in iOS 16. Nützt mir aber leider nichts.
scrollTo
einen Laufzeitfehler. Wenn ich die Doku zu ScrollViewReader richtig verstehe, sollte aber ein Aufruf im onChange
durchaus möglich sein.Um der Frage vorzugreifen: Ja, ich möchte hier lieber
List
statt ScrollView
nutzen, da ich die Swipe-Gesten verwende.Hier der Quellcode. Vielleicht hat ja einer noch eine Idee, wo das Problem liegen können und wie man es in iOS 16 umgehen kann.
Quellcode: ScrollListView.swift
- import SwiftUI
- struct ScrollListView: View {
- @State private var data: [String] = []
- var body: some View {
- VStack {
- Button(action: {
- data.append("ScrollItem #\(data.count+1)")
- }) {
- Label("Add Row", systemImage: "plus")
- }
- .buttonStyle(.borderedProminent)
- ScrollViewReader { proxy in
- List(0..<data.count, id: \.self) { index in
- Text(data[index]).id(index)
- }
- .listStyle(.grouped)
- .navigationTitle("ScrollList Test")
- .onChange(of: data.count) { _ in
- proxy.scrollTo(data.count-1)
- }
- }
- }
- .onAppear() {
- for _ in 0..<20 {
- data.append("ScrollItem #\(data.count+1)")
- }
- }
- }
- }
So Long, and Thanks for All the Fish.