Высота ячейки динамического табличного представления для встроенного представления коллекции, которая заполняется после удаления ячейки табличного представления - PullRequest
0 голосов
/ 05 октября 2018

У меня есть представление коллекции внутри ячейки табличного представления со строкой = 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
}

1 Ответ

0 голосов
/ 05 октября 2018

После загрузки источника данных для представления коллекции вы можете обновить определенные строки в вашей таблице следующим образом:

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

Для высоты строки - попробуйте удалить реализацию метода, этого должно быть достаточноесли вы уже установили значение для estimatedRowHeight.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...