У меня есть tableView
, который отображает сообщения чата. Я хочу вставить разделитель даты перед каждым сообщением, которое является первым сообщением о новой дате (дне). Итак, я создаю label
и добавляю его в представление сообщения чата и корректирую ограничения. Но мой метод перерисовывает вставляемое представление label
:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Chat Message", for: indexPath) as! ChatViewCellView
cell.myChatView.Text = self.messageData[self.messageIndex!].messages[indexPath.item]
let dateLabel:UILabel = createDateSep(date: self.messageData[self.messageIndex!].message_dates[indexPath.item])
cell.myChatView.addSubview(dateLabel)
let labelConstraint = NSLayoutConstraint(item: cell.myChatViewReceived.nameView, attribute: NSLayoutAttribute.top, relatedBy: NSLayoutRelation.equal, toItem: dateLabel, attribute: NSLayoutAttribute.bottom, multiplier: 1, constant: 18)
labelConstraint.identifier = "dateSeparatorIdentifier"
NSLayoutConstraint.activate([labelConstraint])
}
(createDateSep
- это просто моя функция для форматирования строки даты.)
Служба, которая передает tableView предоставляет два массива, один с текстом messages
и один с датами (message_dates
).
Концептуально я понимаю, почему представление воссоздается во время прокрутки, но оно берет разные значения даты из массива, который содержит даты, и рисует их в одном месте. Я не знаю, почему это происходит, и я не знаю, как предотвратить перерисовку, даже если строки даты были одинаковыми, правильные значения. Любое решение должно быть совместимо с iOS 9. У меня есть отдельные Xib
Вот как это выглядит (обратите внимание, что 22 ноября и дата De c 26, а De c 26 - это правильно):
