Ситуация:
У меня есть вид чата. Это похоже на WhatsApp, где разные дни имеют небольшой заголовок, показывающий дату. Я сделал это, создав раздел для каждой отдельной даты и указав дату в заголовке раздела.
Ячейки показывают имя отправителя, если предыдущее сообщение было от другого отправителя. Так что если
- Сообщение 1 от Алисы
- Сообщения 2 и 3 от Боба
- Сообщения 4 и 5 от Алисы
тогда в сообщениях 1, 2 и 4 будет отображаться имя отправителя. Это было достаточно просто, просто установив bool для модели сообщений в процессе отображения после извлечения их из API. Ячейка проверяет этот bool и либо устанавливает, либо не устанавливает текст метки имени отправителя.
Я должен изменить расстояние между ячейками в зависимости от этого тоже. Если ячейка не показывает имя отправителя, например, оно принадлежит тому же отправителю, что и предыдущее сообщение, у нее должно быть меньше разрыва между собой и предыдущим сообщением. Если ячейка является самой верхней ячейкой в разделе, поле должно оставаться как есть.
Я попытался переопределить layoutSubviews
следующим образом:
override func layoutSubviews() {
super.layoutSubviews()
bounds = bounds.inset(by: UIEdgeInsets(top: topInset, left: 0, bottom: 0, right: 0))
}
Где topInset
- это CGFloat, который я установил в очереди ячеек следующим образом:
cell.topInset = item.isSenderSameAsPrevious && indexPath.row > 0 ? 10 : 0
Где item
- моя модель сообщения.
Проблема:
Сообщение 1 имеет имя отправителя и поле по умолчанию вверху (заголовок раздела), сообщение 2 от того же отправителя и не имеет имени отправителя именьшее поле к его вершине (сообщение 1).
Однако сообщение 3 также от того же отправителя, у него нет имени отправителя (поэтому я знаю, что bool установлен правильно), но оно имеет поле по умолчанию:его вершина (сообщение 2).
Я предполагаю, что установка вставки, как я сделал (что я получил от здесь ), не работает должным образом, потому что она просто сдвигает contentView ячейки вверх. Мне нужно, чтобы каждое последующее сообщение от одного и того же отправителя имело небольшой запас по сравнению со своим предшественником до тех пор, пока между ним не появится сообщение от другого отправителя или не появится сообщение в другой день.
Как лучше всего установить расстояние между двумя ячейками в зависимости от произвольной проверки для каждой ячейки?