2017-10-04 4 views
2

Dans ma cellule tableView, j'ai une textView dont la chaîne de i reçois via JSON et mettre à jour la hauteur de cellule comme dynamiquement cetexte vue en plein écran ou d'un contrat après avoir cliqué sur voir plus bouton

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    if indexPath.section == 0 { 
     return 255 
    } 
    return UITableViewAutomaticDimension 
} 

Voici une capture d'écran

enter image description here

maintenant, je veux d'abord vue du texte pour montrer un peu de texte et après avoir cliqué sur voir plus boutonner devrait se développer et lors de l'expansion du texte du bouton doit changer pour voir moins aussi si la longueur de la chaîne est seulement quelques lignes, le voir plus de bouton devrait cacher. La solution que j'ai trouvée implique UILabel et je ne peux pas l'utiliser parce que la taille de la cellule ne deviendra pas dynamique. Aussi, il n'y a pas de propriété de textView comme numberOfLines donc je peux travailler avec. S'il vous plaît pointez-moi dans une bonne direction que dois-je faire.

Répondre

0
extension String { 

    func customHeight(constraintedWidth width: CGFloat, font: UIFont) -> CGFloat { 
    let label = UILabel(frame: CGRect(x: 0, y: 0, width: width, height: .greatestFiniteMagnitude)) 
    label.numberOfLines = 0 
    label.text = self 
    label.font = font 
    label.sizeToFit() 

    return label.frame.height 
} 

} 

Utilisez cette extension comme le code ci-dessous,

let height = item.yourText.customHeight(constraintedWidth: cell.textView.bounds.width, font: UIFont.systemFont(ofSize: 17, weight: UIFontWeightSemibold)) 
cell.textViewHeightConstraint.constant = (height) 

S'il vous plaît essayez d'utiliser la méthode d'extension ci-dessus où vous passez la largeur de votre textview et la police. Cette méthode définit dynamiquement la hauteur de votre textview. Mettez également votre propre logique pour calculer ce qui se passera sur voir plus et voir moins de boutons.