在 Swift 中,你可以通过自定义 UICollectionViewCell 的子类来计算对应的高度大小,并将其传递给 collectionView 的 sizeForItemAt 方法来设置大小。

首先,创建一个继承自 UICollectionViewCell 的子类,并在其中计算出对应的高度大小。例如,假设你的子类名为 CustomCollectionViewCell,可以按照以下方式计算高度:

class CustomCollectionViewCell: UICollectionViewCell {
    // 在自定义的 cell 中添加一个方法来计算高度
    func calculateHeight(forWidth width: CGFloat) -> CGFloat {
        // 在这里根据你的需求计算出高度,例如根据文本内容、图片等等
        // 假设你的高度计算逻辑为固定的高度加上文本内容的高度
        let fixedHeight: CGFloat = 50.0 // 固定高度
        let textHeight: CGFloat = calculateTextHeight() // 文本内容高度,需要根据具体情况实现
        
        return fixedHeight + textHeight
    }
    
    // 计算文本内容的高度
    private func calculateTextHeight() -> CGFloat {
        // 在这里根据文本内容计算出高度,例如使用 NSString 的 boundingRect 方法
        let text = 'This is some example text'
        let font = UIFont.systemFont(ofSize: 14.0)
        let width = contentView.bounds.width - 20.0 // 假设文本的宽度为 cell 宽度减去边距
        let attributes: [NSAttributedString.Key: Any] = [NSAttributedString.Key.font: font]
        let size = CGSize(width: width, height: .greatestFiniteMagnitude)
        let options = NSStringDrawingOptions.usesFontLeading.union(.usesLineFragmentOrigin)
        let textRect = NSString(string: text).boundingRect(with: size, options: options, attributes: attributes, context: nil)
        
        return ceil(textRect.height)
    }
}

然后,在你的 UICollectionViewDelegateFlowLayout 的实现中,可以调用 CustomCollectionViewCell 的 calculateHeight 方法来获取对应的高度,并将其传递给 sizeForItemAt 方法来设置大小。例如:

class ViewController: UIViewController, UICollectionViewDelegateFlowLayout {
    // ...
    
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let cellWidth = collectionView.bounds.width // 假设每个 cell 的宽度为 collectionView 的宽度
        let cell = CustomCollectionViewCell() // 实例化自定义的 cell
        let cellHeight = cell.calculateHeight(forWidth: cellWidth) // 计算 cell 的高度
        
        return CGSize(width: cellWidth, height: cellHeight)
    }
}

通过以上步骤,你可以在自定义的 UICollectionViewCell 子类中计算出对应的高度大小,并将其传递给 UICollectionViewDelegateFlowLayout 的 sizeForItemAt 方法来设置 cell 的大小。


原文地址: https://www.cveoy.top/t/topic/qyP6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录