Вы можете использовать расширение метки, чтобы идентифицировать номера строк на метке, и вы можете переключать ячейки.Попробуйте это расширение, чтобы определить количество строк.
extension UILabel {
func numberOfLines() -> Int {
let textSize = CGSize(width: self.frame.size.width, height: CGFloat(Float.infinity))
let rHeight = lroundf(Float(self.sizeThatFits(textSize).height))
let charSize = lroundf(Float(self.font.lineHeight))
let lineCount = rHeight/charSize
return lineCount
}
}
Для вашего сценария вы можете использовать так: -
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let baseCell = tableView.dequeueReusableCell(withIdentifier: "TableViewCellB", for: indexPath) as! TableViewCellB
if baseCell.titleLabel.numberOfLines() > 1 && indexPath.row == 3 {
let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCellA", for: indexPath) as! TableViewCellA
cell.titleLabel.text = itemsArray[indexPath.row].title
cell.subtitleLabel.text = itemsArray[indexPath.row].value
cell.expandBtn.addTarget(self, action: #selector(expandBtnPressed), for: .touchUpInside)
cell.expandBtn.tag = indexPath.row
if isExpand {
cell.expandBtn.setTitle("close", for: .normal)
cell.subtitleLabel.numberOfLines = 0
} else {
cell.expandBtn.setTitle("open", for: .normal)
cell.subtitleLabel.numberOfLines = 1
}
cell.remakeLayout(isExpand: isExpand)
return cell
} else {
let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCellB", for: indexPath) as! TableViewCellB
cell.titleLabel.text = itemsArray[indexPath.row].title
cell.subtitleLabel.text = itemsArray[indexPath.row].value
return cell
}
}