我在第1行的表视图单元格内有一个收集视图,该单元格已经出队后就从Firebase数据库中加载了内容。因此,在heightForRowAt:的单元格上使用AutoDimensions无效,因为那时集合视图中没有内容。收集视图固定在单元的所有侧面。当集合视图已加载所有数据时,在特定索引路径上更新表视图单元格高度的最佳方法是什么。谢谢!
在包含表视图的VC中,我设置了一个func,它从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,则不会显示集合视图。它仅显示是否将func设置为返回常数(如200)。我在viewDidLoad()中设置了EstimateRowHeight和rowHeight。
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.row == 0 {
return UITableView.automaticDimension
}
return UITableView.automaticDimension
}
答案 0 :(得分:0)
为集合视图加载数据源后,可以像这样更新表中的特定行:
UIView.performWithoutAnimation {
tableView.reloadRows(at: [indexPath], with: .none)
}
对于行高-尝试删除方法实现,如果已经为estimatedRowHeight
设置了一个值就足够了。