Mise à jour : Dans iOS 14, il y a maintenant un moyen natif de faire cela. Je le fais comme suit
ScrollViewReader { scrollView in
ScrollView(.vertical) {
LazyVStack {
ForEach(notes, id: \.self) { note in
MessageView(note: note)
}
}
.onAppear {
scrollView.scrollTo(notes[notes.endIndex - 1])
}
}
}
Pour iOS 13 et inférieur, vous pouvez essayer :
J'ai trouvé que le fait d'inverser les vues semblait fonctionner assez bien pour moi. La ScrollView démarre en bas de l'écran et, lorsqu'on y ajoute de nouvelles données, la vue défile automatiquement vers le bas.
- Faites pivoter la vue extérieure de 180
.rotationEffect(.radians(.pi))
- Retournez-le sur le plan vertical
.scaleEffect(x: -1, y: 1, anchor: .center)
Vous devrez faire de même pour vos vues intérieures, car elles seront désormais toutes tournées et retournées. Pour les retourner, faites la même chose que ci-dessus.
Si vous en avez besoin à de nombreux endroits, il peut être intéressant d'avoir une vue personnalisée pour cela.
Vous pouvez essayer quelque chose comme ce qui suit :
List(chatController.messages, id: \.self) { message in
MessageView(message.text, message.isMe)
.rotationEffect(.radians(.pi))
.scaleEffect(x: -1, y: 1, anchor: .center)
}
.rotationEffect(.radians(.pi))
.scaleEffect(x: -1, y: 1, anchor: .center)
Voici une extension de View pour le retourner.
extension View {
public func flip() -> some View {
return self
.rotationEffect(.radians(.pi))
.scaleEffect(x: -1, y: 1, anchor: .center)
}
}