退出表格视图单元格后填充的嵌入式集合视图的动态表格视图单元格高度

时间:2018-10-05 10:30:15

标签: ios swift uitableview uicollectionview

我在第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
}

1 个答案:

答案 0 :(得分:0)

为集合视图加载数据源后,可以像这样更新表中的特定行:

UIView.performWithoutAnimation {
   tableView.reloadRows(at: [indexPath], with: .none)
}

对于行高-尝试删除方法实现,如果已经为estimatedRowHeight设置了一个值就足够了。