При добавлении контента в мой ListView я хочу, чтобы он автоматически прокручивался вниз.
Я использую SwiftUI Listи в BindableObjectкачестве контроллера. Новые данные добавляются в список.
List(chatController.messages, id: \.self) { message in
MessageView(message.text, message.isMe)
}
Я хочу, чтобы список прокручивался вниз, когда я добавляю новые данные в список сообщений. Однако мне приходится прокручивать вниз вручную.
Решение проблемы
Обновление: в iOS 14 теперь есть собственный способ сделать это. я так и делаю
ScrollViewReader { scrollView in
ScrollView(.vertical) {
LazyVStack {
ForEach(notes, id: \.self) { note in
MessageView(note: note)
}
}
.onAppear {
scrollView.scrollTo(notes[notes.endIndex - 1])
}
}
}
Для iOS 13 и ниже вы можете попробовать:
Я обнаружил, что переключение представлений, похоже, работает для меня довольно хорошо. Это запускает ScrollView внизу, и при добавлении новых данных к нему автоматически прокручивается представление вниз.
.rotationEffect(.radians(.pi)).scaleEffect(x: -1, y: 1, anchor:.center)Вы должны будете сделать это и со своими внутренними представлениями, так как теперь все они будут вращаться и переворачиваться. Чтобы перевернуть их обратно, сделайте то же самое, что и выше.
Если вам нужно так много мест, возможно, стоит иметь для этого собственное представление.
Вы можете попробовать что-то вроде следующего:
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)
Вот расширение View, чтобы перевернуть его
extension View {
public func flip() -> some View {
return self
.rotationEffect(.radians(.pi))
.scaleEffect(x: -1, y: 1, anchor:.center)
}
}
Комментариев нет:
Отправить комментарий