У меня есть представление коллекции внутри ячейки табличного представления со строкой = 1, которая загружается с содержимым из базы данных Firebase после того, как ячейка уже снята.Следовательно, использование AutoDimensions для ячейки на heightForRowAt: не работает, поскольку в это время в представлении коллекции нет содержимого.Представление коллекции привязано ко всем сторонам ячейки.Каков наилучший способ обновления высоты ячейки табличного представления по указанному пути индекса, когда представление сбора загрузило все данные.Спасибо!
В VC, содержащем табличное представление, я настроил функцию, извлекающую список пользователей из БД, которая вызывается в viewDidLoad (), и я настроил протоколы для перезагрузки collectionView, который являетсянаходится в классе ячеек tableView.
fileprivate func retrieveListOfUsers() {
print ("fetching users from database")
let ref = Database.database().reference()
guard let conversationId = conversation?.conversationId else {return}
ref.child("conversation_users").child(conversationId).observeSingleEvent(of: .value, with: { (snapshot) in
guard let dictionaries = snapshot.value as? [String:AnyObject] else {return}
for (key, _) in dictionaries {
let userId = key
Database.fetchUsersWithUID(uid: userId, completion: { (user) in
self.users.append(user)
DispatchQueue.main.async {
self.reloadDelegate.reloadCollectionView()
}
})
}
}, withCancel: nil)
}
Это код для удаления из очереди ячейки.Я удалил код для первой ячейки в этом посте, поскольку он не имеет значения и не хотел, чтобы вы читали ненужный код.
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
// Code for cell in indexPath.row = 0
if indexPath.row == 1 {
let usersCell = tableView.dequeueReusableCell(withIdentifier: usersCellId, for: indexPath) as! UsersTableViewCell
usersCell.backgroundColor = .clear
usersCell.selectionStyle = .none
usersCell.collectionView.delegate = self
usersCell.collectionView.dataSource = self
self.reloadDelegate = usersCell
usersCell.users = users
return usersCell
}
}
Если я возвращаю UITableView.automaticDimension, представление коллекции не отображается.Он показывает только, если я установил функцию, чтобы она возвращала константу наподобие 200. Я установил оценочные значения RowHeight и rowHeight в viewDidLoad ().
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.row == 0 {
return UITableView.automaticDimension
}
return UITableView.automaticDimension
}