2. ์ต์ ๋ฉ์ธ์ง(๋งจ ์๋)์ผ๋ก ํ๋ฉด ์คํฌ๋กคํ๊ธฐ.
์ฑํ ์ ์์ฑํ์ ๋, ํ๋ฉด ์คํฌ๋กค์ ๋งจ ์๋๋ก ๋ด๋ ค์ ์ต์ ๋ฉ์ธ์ง๋ฅผ ๋ณด์ฌ์ค์ผ ํ๋ค.
tableView ์์ ํน์ ์ ๋ก ์คํฌ๋กค ํ๋ ํจ์๋ scrollToRow ํจ์ ์ด๋ค.
ํน์ ์ ์ธ๋ฑ์ค์ธ indexPath, ์คํฌ๋กค ํฌ์ง์ (top, bottom, middle), ์คํฌ๋กค ์ ๋๋ฉ์ด์ ํจ๊ณผ true or false ์ธ์๊ฐ ๋ค์ด๊ฐ๋ค.
func loadMessages(){
db.collection(K.FStore.collectionName).order(by: K.FStore.dateField).addSnapshotListener { (querySnapshot, err) in
self.messages = []
if let e = err {
print("Error getting documents: \(e)")
} else {
for doc in querySnapshot!.documents {
let data = doc.data()
if let messageSender = data[K.FStore.senderField] as? String,
let messageBody = data[K.FStore.bodyField] as? String {
let newMessage = Message(sender: messageSender, body: messageBody)
self.messages.append(newMessage)
DispatchQueue.main.async{
self.tableView.reloadData()
let indexPath = IndexPath(row: self.messages.count - 1, section: 0)
self.tableView.scrollToRow(at: indexPath, at: .top, animated: true)
}
}
}
}
}
}
ChatViewController ํด๋์ค์ loadmessages() ํจ์์์ tableView์ ๋ฐ์ดํฐ๋ฅผ reload ํ๋ ๋ถ๋ถ์ tableView๋ฅผ ์คํฌ๋กค ํ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ฃผ์๋ค.
์ด ๋, indexPath ๊ฐ์ ๊ตฌํ๊ธฐ ์ํด indexPath ๋ณ์๋ฅผ ๋ง๋ค์๋ค. ๋ฉ์ธ์ง ๊ฐ์ - 1 ์ธ๋ฑ์ค ๋ฐ 0 ์ธ์ ์ ๊ฐ๋ฆฌํจ๋ค.
๊ฒฐ๊ณผํ๋ฉด์ ์๋์ ๊ฐ๋ค.