Dynamic UICollectionView header size based on UILabel

前端 未结 8 1926
梦谈多话
梦谈多话 2020-12-08 04:51

I\'ve read a bunch of posts on adding header to UICollectionView. In an iOS 7+ app in Swift, I\'m trying to add a header with a UILabel in it whose height should adjust base

8条回答
  •  醉梦人生
    2020-12-08 05:39

    In your cell add the following:

    fileprivate static let font = UIFont(name: FontName, size: 16)
    fileprivate static let insets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    

    Adjust both fonts and insets accordignly.

    Then add the following to your cell

       static func textHeight(_ text: String, width: CGFloat) -> CGFloat {
        let constrainedSize = CGSize(width: width - insets.left - insets.right, height: CGFloat.greatestFiniteMagnitude)
        let attributes = [ NSAttributedStringKey.font: font ]
        let options: NSStringDrawingOptions = [.usesFontLeading, .usesLineFragmentOrigin]
        let bounds = (text as NSString).boundingRect(with: constrainedSize, options: options, attributes: attributes as [NSAttributedStringKey : Any], context: nil)
        return ceil(bounds.height) + insets.top + insets.bottom
    }
    

    You can now use this function to calculate automatic height

      func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
        let height = ManuallySelfSizingCell.textHeight("Your text", width: view.frame.width)
        return CGSize(width: view.frame.width, height: height + 16)
    }
    

提交回复
热议问题