首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UICollectionViewFlowLayout问题

UICollectionViewFlowLayout问题
EN

Stack Overflow用户
提问于 2020-02-17 09:33:12
回答 1查看 67关注 0票数 0

我曾经尝试过创建自调整大小的collectionView cell,但是我的标签不想扩大它的高度,变成多行,而是只在一条线上,而我的单元格超出了collectionView帧。我已经创建了自己的自定义UICollectionViewFlowLayout,并试图处理那里的所有东西。我做错了什么?期待您的回答,谢谢!

我的实施:

代码语言:javascript
复制
class VerticalLayout:UICollectionViewFlowLayout {
override func prepare() {
    super.prepare()
    self.scrollDirection = .vertical
    self.minimumLineSpacing = 0
    self.minimumInteritemSpacing = 0
    self.estimatedItemSize = CGSize(width: UIScreen.main.bounds.width, height: 173)
    self.sectionInset = .zero
    }
}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-17 09:50:51

必须计算文本高度并将其传递给您的集合视图委托方法。

代码语言:javascript
复制
 func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

    let itemHeight: CGFloat = estimatedHeightForText(text: items[indexPath.item].text, fontSize: fontSize, fontWeight: fontWeight, width: widthForText) + someRawValue // here count height for cell
    var itemWidth: CGFloat = someRawVal

    return CGSize(width: itemWidth, height: itemHeight)

}

数一数这里

代码语言:javascript
复制
    func estimatedHeightForText(text: String, fontSize: CGFloat, fontWeight: UIFont.Weight, width: CGFloat) -> CGRect {

    let size = CGSize(width: width, height: 1000)
    let font = UIFont.systemFont(ofSize: fontSize, weight: fontWeight)

    return NSString(string: text).boundingRect(with: size, options: [.usesLineFragmentOrigin, .usesFontLeading], attributes: [NSAttributedString.Key.font: font], context: nil)
}

UPD. widthForText --这是单元格中文本宽度的重要值。算好了

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60259452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档