У меня есть ViewController с некоторым представлением заголовка и UICollectionView, которые заполняют все оставшееся пространство. (это приложение для чата)
Я не использую раскадровку. Мое представление коллекции объявляется так:
self.messagesCollectionView = UICollectionView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height - barHeight), collectionViewLayout: UICollectionViewFlowLayout())
messagesCollectionView.register(MessageCollectionViewCell.self, forCellWithReuseIdentifier: self.cellReuseIdentifier)
messagesCollectionView.delegate = self
messagesCollectionView.dataSource = self
self.view.addSubview(messagesCollectionView)
Тогда у меня есть тезисы func для правильного получения моих данных:
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
self.conversation?.messagesList.count ?? 0
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: self.cellReuseIdentifier, for: indexPath) as! MessageCollectionViewCell
if let message = self.conversation?.messagesList[indexPath.row] {
cell.createMessage(message: message)
}
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
if let message = self.conversation?.messagesList[indexPath.row] {
var heightNeeded = message.text.height(withConstrainedWidth: FDDimensions.shared.k_MessageMaxWidth, font: FDFonts.Montserrat_Regular_14 ?? UIFont.systemFont(ofSize: 14))
heightNeeded += 22
heightNeeded += 25
return CGSize(width: self.view.frame.width, height: heightNeeded)
} else {
return CGSize(width: 0, height: 0)
}
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 10
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsets.init(top: 10, left: 0, bottom: 10, right: 0)
}
Итак, вот пример того, что я получаю, с хорошим аспектомперед изменением размера:
Что я хочу сделать, так это изменить размер моей коллекции при отображении клавиатуры.
Воткод в моей функции, который срабатывает при появлении клавиатуры:
self.messagesCollectionView.frame.size.height -= keyboardSize.height - (FDUtils.shared.getBottomSafeAreaHeight() ?? 0)
self.messagesCollectionView.reloadData()
self.messagesCollectionView.layoutIfNeeded()
Вот результат, который я получаю:
Все мои ячейки изменены ирезультат полностью сломан
Есть идеи, где я не прав? Я пытался просто настроить contentInsets collectionView, но я не могу использовать это, потому что поведение полосы прокрутки не будет логичным, если я использую это решение
Спасибо