在TableViewCell中更改一堆约束-错误的布局

时间:2019-07-01 09:16:58

标签: swift xcode autolayout

因此,我试图制作一个 chatMessageCell ,但有时{strong} cellForRowAt部分中的更改约束会弄乱布局

单元格:

enter image description here

  • 时间标签在顶部,并有高度限制:

通常设置为0,但是当选择单元格时,它将更改为30

  • 消息TextView

其高度取决于文本的长度。如果为零,则TextView被隐藏

  • 附件预览堆栈视图

如果邮件带有附件,则可以看到堆栈视图以及图像(高度为150)


代码:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        var chatMessage = ChatStore.shared.chatRoom(id: currentChatRoomId).messages[indexPath.row]

        var cell = tableView.dequeueReusableCell(withIdentifier: "ChatMessageCell", for: indexPath) as! ChatMessageCell




        cell.timeLabel.text = "2019/02/12"

        if chatMessage.message == "" {
            cell.messageTextView.isHidden = true
        } else {
            cell.messageTextView.isHidden = false
        }
        cell.messageTextView.text = chatMessage.message

        if (currentSelectedIndexPath != indexPath) {

            cell.bubbleView.backgroundColor = appColors.chatMessage

            // Time label hidden
            cell.timeLabelHeightConstraint.constant = 0

        } else {

            cell.bubbleView.backgroundColor = appColors.chatMessageSelected

            // Time label visible
            cell.timeLabelHeightConstraint.constant = 30

        }


        if chatMessage.attachments.count > 0 {

            cell.attachmentsPreviewStackView.isHidden = false
            cell.attachmentsPreviewStackView.subviews.forEach({ $0.removeFromSuperview() })

            for attachment in chatMessage.attachments {

                if let attachmentPreviewView = Bundle.main.loadNibNamed("AttachmentPreviewView", owner: self, options: nil)?.first as? AttachmentPreviewView {
                    attachmentPreviewView.imageView.image = UIImage(named: "TEST_IMAGE")

                    cell.attachmentsPreviewStackView.addArrangedSubview(attachmentPreviewView)
                }

            }
        } else {
            // No attachments, hide
            cell.attachmentsPreviewStackView.isHidden = true

            cell.attachmentsPreviewStackView.subviews.forEach({ $0.removeFromSuperview() })
        }

        cell.delegate2 = self

        return cell

    }

问题: 当用户关闭键盘时,某些单元格的布局就会混乱。

只有在关闭键盘后才会发生这种情况,并且只有在我用insertRows(at: )添加新行之后

如果正常滚动或重新加载tableView,就不会出现这样的问题。

视频:https://www.youtube.com/watch?v=uMmQyN3SM5g&feature=youtu.be (从21秒开始)


我的问题是:这背后的可能原因是什么?

当我更改约束 / cellForRowAt部分的stackView中隐藏视图时,我应该调用.layoutIfNeeded()吗?

0 个答案:

没有答案