2

J'ai une sous-classe UICollectionViewLayout avec une vue supplémentaire qui contient un UILabel multiligne. Le problème est que tout le texte n'est pas visible à un certain point, comment puis-je donner à la vue supplémentaire la hauteur égale à son contenu?CollectionViewLayout Hauteur supplémentaire vue égale au contenu

Example of the layout.

+1

Peut-être que vous aidera: https://stackoverflow.com/a/41607018/5381663 – kamil3

Répondre

1

Vous pouvez trouver la hauteur du texte à l'aide ci-dessous fonction: -

func labelHeight(width:CGFloat , font:UIFont , text:String)->CGFloat{ 
    let label:UILabel = UILabel.init(frame: CGRect.init(x: 0, y: 0, width: width, height: CGFloat.greatestFiniteMagnitude)) 
    label.numberOfLines = 0 
    label.lineBreakMode = NSLineBreakMode.byWordWrapping 
    label.font = font 
    label.text = text 
    label.sizeToFit() 
    return height:label.frame.height 
} 

puis ajoutez cette méthode de UICollectionViewDelegateFlowLayout dans votre contrôleur et retourner la taille de votre tête

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize{ 
    // Pass parameter into this function according to your requirement 
    let height = labelHeight(width: collectionView.bounds.width , font:UIFont , text:"") 
    return CGSize(width:collectionView.bounds.width , height: height + 10) 

}