Swiftui - Animation Vstack Order und Inhalt gleichzeitig ohne StörungenIOS

Programmierung für iOS
Anonymous
 Swiftui - Animation Vstack Order und Inhalt gleichzeitig ohne Störungen

Post by Anonymous »

tl; dr: < /p>
In Swiftui möchte ich ordnungsgemäße Animationen, wenn eine Liste von Zeilen die Reihenfolge ändert, gleichzeitig, wenn der Zeileninhalt die Werte ändert. Funktioniert mit List , funktioniert nicht mit Vstack /

Code: Select all

HStack
. Wahrscheinlich etwas mit der Ansicht Identität, Übergängen, Animationen und Transaktionen zu tun. src = "https://i.static.net/4apkktel.gif" /> < /p>

Ich habe ein gemeinsames Setup, aber ich kann keine perfekten Animationen erreichen. Eigenschaft. < /li>
Die Liste wird nach dieser Eigenschaft sortiert. < /li>
Über eine Änderung der Eigenschaft - das Zeilenetikett muss animieren, aber die Gesamtreihen selbst ändern sich möglicherweise auch und müssen auch animieren. /> Eine Liste von Kommentaren. Die Zeilenanimation.

Code: Select all

LazyVStack
.
Das Problem ist das gleiche, unabhängig davon, ob LazyvStack /vstack verwendet wird.

Code: Select all

struct ContentView: View {
@State private var comments: [Comment] = []

var body: some View {
HStack {
Text("Sate 1").onTapGesture { comments = [.init("Well done", 6), .init("Interesting", 5), .init("Nice", 4)] }
Text("Sate 2").onTapGesture { comments = [.init("Interesting", 7), .init("Well done", 6), .init("Nice", 4)] }
}

// Option 1: Animation glitch
VStack { ForEach(comments, content: CommentRowView.init(comment:)) }
.padding()
.animation(.default, value: comments)

// Option 2: Works, but uses `List`
// List { ForEach(comments, content: CommentRowView.init(comment:)) }
//    .animation(.default, value: comments)
}
}

struct CommentRowView: View {
let comment: Comment

var body: some View {
HStack {
Text(comment.text).font(.largeTitle)
Spacer()
VStack {
Text(comment.upvotes.formatted())
.contentTransition(.numericText())
.animation(.default, value: comment.upvotes)
}
.font(.title)
}.padding().border(.gray)
}
}

struct Comment: Identifiable, Equatable {
var id: String { text }; let text: String; let upvotes: Int
init(_ text: String, _ upvotes: Int) { self.text = text; self.upvotes = upvotes }
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post