почему ячейка представления таблицы с автоматическим изменением размеров не работает, и это зависит от размера текста моей метки в раскадровке? - PullRequest
0 голосов
/ 27 марта 2019

Я знаю, что здесь есть поток, предназначенный для запроса ячейки табличного представления с автоматическим изменением размеров: почему не работает UITableViewAutomaticDimension?

но, может быть, дело обстоит немного иначе.

поэтому я хочу автоматически изменить размер ячейки табличного представления на основе текста, назначенного моей метке. Я думаю, что я попытался установить UITableViewAutomaticDimension, а также попытался установить все ограничения (сверху, снизу, справа налево) относительно его контейнера superview / cell. и я также установил номер строки равным нулю, как это

вот код моего ВК:

class ChatLogVC: UIViewController {


    @IBOutlet weak var chatLogTableView: UITableView!

    var messageList = [ChatMessage]()

    override func viewDidLoad() {
        super.viewDidLoad()

        listenForMessages()

        chatLogTableView.estimatedRowHeight = UITableView.automaticDimension
        chatLogTableView.rowHeight = UITableView.automaticDimension


    }


    private func listenForMessages() {

        // Get data from firebase         

        let fromId = currentUser.uid
        let toId = otherUser.uid

        let ref = Database.database().reference(withPath: "/user-messages/\(fromId)/\(toId)")

        ref.observe(DataEventType.childAdded, with: { (snapshot) in

            let messageDictionary = snapshot.value as? [String : Any] ?? [:]
            let message = ChatMessage(dictionary: messageDictionary)
            self.messageList.append(message)
            self.chatLogTableView.reloadData()

        })
    }


}



   //MARK: - UI Table View Data Source & Delegate
extension ChatLogVC : UITableViewDataSource {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return messageList.count
    }

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

        let cellFrom = tableView.dequeueReusableCell(withIdentifier: "fromChatViewCell", for: indexPath) as! fromChatViewCell

        let chatMessage = messageList[indexPath.row]

        cellFrom.chatMessageData = chatMessage
        cellFrom.otherUserData = otherUser
        return cellFrom

    }

и вот ячейка табличного представления:

class fromChatViewCell: UITableViewCell {

    @IBOutlet weak var fromChatLabel: UILabel!
    @IBOutlet weak var fromProfilePictureImageView: UIImageView!


    var chatMessageData : ChatMessage?
    var otherUserData : User?


    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        updateUI()
    }

    func updateUI() {

        guard let message = chatMessageData, let otherUser = otherUserData else {return}
        guard let url = URL(string: otherUser.profileImageURL) else {return}
        fromChatLabel.text = message.text
        fromProfilePictureImageView.kf.setImage(with: url, options: [.transition(.fade(0.2))])

    }

}

}

Я также попытался подключить источник данных и делегировать к VC: enter image description here

и вот мое ограничение метки: enter image description here

и я также установил номер строки равным нулю: enter image description here

и вот моя проблема:

если в моей раскадровке я установил текст метки, используя всего несколько слов, то автоматическое изменение размера не работает, кажется, что он будет отображать только одну строку текста, даже если на самом деле текст из firebase больше одной строки

enter image description here

результат (приложение запущено):

enter image description here

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

enter image description here

он будет расширяться, но автоматическое изменение размеров все еще не работает, так как метка все еще обрезается enter image description here

что здесь не так? Я действительно смущен

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

...