Я делаю настраиваемый UITableViewCell, в котором я должен ввести три текстовых поля, теперь проблема заключается в том, что поле с именем Descirizione действительно очень широкое, и я должен найти способ показать все три поля! это также создает проблему при отображении поля Prezzo, которое перемещается, когда поле Описание очень велико.
Изображение отображаемого текста ниже
CustomTableViewCellArticolo.swift
import UIKit
import Foundation
class CustomTableViewCellArticolo: UITableViewCell {
let labCodArt = UILabel()
let labDescrizione = UILabel()
let labPrezzo = UILabel()
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
labCodArt.translatesAutoresizingMaskIntoConstraints = false
labDescrizione.translatesAutoresizingMaskIntoConstraints = false
labPrezzo.translatesAutoresizingMaskIntoConstraints = false
contentView.addSubview(labCodArt)
contentView.addSubview(labDescrizione)
contentView.addSubview(labPrezzo)
let viewsDict = [
"CodArt": labCodArt,
"Descrizione": labDescrizione,
"Prezzo": labPrezzo,
] as [String: Any]
contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:[Prezzo]-15-[Descrizione]", options: [], metrics: nil, views: viewsDict))
contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-[CodArt]-5-[Descrizione]-|", options: [], metrics: nil, views: viewsDict))
contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-[CodArt]-|", options: [], metrics: nil, views: viewsDict))
contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-[Descrizione]-[Prezzo]-|", options: [], metrics: nil, views: viewsDict))
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
UIViewController.swift
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
TableViewArticoli.beginUpdates()
let cell = TableViewArticoli.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) as! CustomTableViewCellArticolo
cell.labCodArt.text = filteredData[indexPath.row].CodArt
cell.labDescrizione.text = filteredData[indexPath.row].Descrizione
cell.labPrezzo.text = " € \(filteredData[indexPath.row].Prezzo!)"
TableViewArticoli.endUpdates()
return cell
}
Сразу после этой строки:
contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-[Descrizione]-[Prezzo]-|", options: [], metrics: nil, views: viewsDict))
Добавьте эту строку:
labPrezzo.setContentCompressionResistancePriority(UILayoutPriority.required, for: .horizontal)
labDescrizione.adjustsFontSizeToFitWidth = true
Я обновил ответ, вы это проверили и использовали новый?
Теперь Prezzo виден, но Descrizione имеет переменный размер, поэтому в некоторых случаях Prezzo видно перемещенным, можно ли оставить Prezzo фиксированным справа? (Что происходит, видно во второй строке изображения выше)
Замените эту строку contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-[Descrizione]-[Prezzo]-|", options: [], metrics: nil, views: viewsDict))
этими двумя строками и проверьте, что происходит: contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-[Descrizione]-|", options: [], metrics: nil, views: viewsDict))
contentView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|-[Prezzo]-|", options: [], metrics: nil, views: viewsDict))
С вашим решением метка Descrizione видна правильно, метка Prezzo больше не видна!