Строка проверяется как пустая, когда это не - PullRequest
0 голосов
/ 06 октября 2018

У меня есть CollectionView, который я использую, чтобы показать мой канал в своем социальном приложении.Я сейчас пытаюсь добавить новые сообщения в фид, который отлично работает.Однако иногда, когда добавленные ячейки занимают всю высоту экрана, заметка, прикрепленная к сообщению, не отображается.Это потому, что у меня есть проверка, которая проверяет, является ли заметка пустой, и если это так, то подпредставление текстового представления заметки удаляется, а ограничения меняются.Посмотрите на изображение, чтобы понять, что я имею в виду (извините за плохое качество, я был ограничен 2 МБ):

Missing Note

Это гдеэто идет не так, в моем методе cellForItemAt.У меня есть два массива: posts и userInfo, которые правильно заполнены данными, потому что, если я распечатываю все данные в cellForItemAt, все они отображаются, как и ожидалось.

if let postNote = posts[indexPath.item].postNote {
    if(postNote.isEmpty) {
        socialCell.noteTextView.removeFromSuperview()
        socialCell.postDetailsView.bottomAnchor.constraint(equalTo: socialCell.noteTextView.bottomAnchor).isActive = false
        socialCell.postDetailsView.bottomAnchor.constraint(equalTo: socialCell.postName.bottomAnchor).isActive = true
    }
}

То, что я пытаюсь сделать здесь, эторешить, должны ли ограничения быть установлены для заметки или названия сообщения, в зависимости от того, есть заметка или нет.Если я закомментирую этот код, ограничения будут не такими, какими они должны быть (очевидно), но все примечания будут показаны.Так что я уверен, что проблема может быть найдена здесь: моя строка заметки считается пустой, хотя это не так.Распечатка массива или print (postNote) возвращает правильное значение.

Что здесь происходит и как мне это исправить?

1 Ответ

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

Клетки используются повторно.Когда ячейка, в которой ранее была пустая заметка, повторно используется для записи с непустой заметкой, вам необходимо убедиться, что ограничения установлены правильно, или заметка все равно будет скрыта.

Кроме того, вы этого не делаетехочу продолжать добавлять ограничения, поскольку ячейка используется повторно.Вы должны добавить два ограничения, один раз, в свой пользовательский класс ячеек, а затем просто установить их как активные / неактивные, как требуется.

Наконец, не удаляйте noteTextView, как снова, когда ячейкаповторное использование не будет доступно в случае, когда есть заметка.Вы должны просто установить его на isHidden = true или просто скрыть его с ограничениями

Что-то вроде:

socialCell.noteTextView.isHidden = true
socialCell.hideNoteConstraint.isActive = true
socialCell.showNoteConstraint.isActive = false

if let postNote = posts[indexPath.item].postNote, !postNote.isEmpty {
    socialCell.noteTextView.isHidden = true
    socialCell.hideNoteConstraint.isActive = false
    socialCell.showNoteConstraint.isActive = true
} 
...