Я знаю, что здесь есть поток, предназначенный для запроса ячейки табличного представления с автоматическим изменением размеров: почему не работает 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:
и вот мое ограничение метки:
и я также установил номер строки равным нулю:
и вот моя проблема:
если в моей раскадровке я установил текст метки, используя всего несколько слов, то автоматическое изменение размера не работает, кажется, что он будет отображать только одну строку текста, даже если на самом деле текст из firebase больше одной строки
результат (приложение запущено):
но если я установлю текст на своем ярлыке, используя много слов, то ячейка представления таблицы с автоматическими размерами сработает и покажет всю строку из базы данных firebase:
он будет расширяться, но автоматическое изменение размеров все еще не работает, так как метка все еще обрезается
что здесь не так? Я действительно смущен
Я пытался изменить приоритет ограничения нижней метки на 200, иногда авторазмер работал, но в противном случае это не сработало. может быть, моя проблема связана с асинхронной проблемой, я попытался перезагрузить табличное представление сразу после получения массива из firebase. но я не знаю причину моей проблемы