动态计算collectionView单元格高度

时间:2016-10-30 16:57:14

标签: ios swift uicollectionview uicollectionviewcell

我目前正在尝试动态计算In [24]: chunkit((3, 1, 4, 2, 2, 1, 1), 5) Out[24]: ((3, 1), (4,), (2, 2, 1), (1,)) In [25]: chunkit((3, 1, 4, 2, 2, 1, ), 5) Out[25]: ((3, 1), (4,), (2, 2, 1)) In [26]: chunkit((3, 1, 4, 2, 2, 1, 5), 5) Out[26]: ((3, 1), (4,), (2, 2, 1), (5,)) In [27]: chunkit((3, 1, 4, 2, 2, 1, 5, 6), 5) Out[27]: ((3, 1), (4,), (2, 2, 1), (5,), (6,)) In [28]: chunkit((3, 1, 4, 2, 2, 1, 5, 6, 1, 6), 5) Out[28]: ((3, 1), (4,), (2, 2, 1), (5,), (6,), (1,), (6,)) 的高度,但使用UICollectionViewCell(动态属性)和单元格的当前高度。通过获取单元格内标签UILabel的高度并将该值添加到单元格的原始高度来计算高度。出于某种原因,这总是在sizeThatFits中返回0。我很确定问题是在创建单元格之前计算的大小因此总是会返回0.是否还有这个? (单元格的UI是在类本身内创建的,而不是在celllForItemAt中也可能是一个问题吗?)

sizeForItemAt

2 个答案:

答案 0 :(得分:2)

NSAttributedString可以告诉你一个实例有多大,给定一个绑定。因此,假设您知道标签有多宽,并且您知道文本是什么以及它的属性是什么,您可以在不创建标签的情况下获得大小:

let width = CGFloat(200)
let attributedString = NSAttributedString(string: "Test", attributes: [NSFontAttributeName : UIFont(name: "Helvetica", size: 18)!])
let boundingRect = attributedString.boundingRect(with: CGSize(width: width, height: CGFloat.greatestFiniteMagnitude), options: [.usesLineFragmentOrigin, .usesFontLeading], context: nil)

答案 1 :(得分:-1)

迅速-3.0

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
{
   let width = self.collectionView.frame.size.width
   let Height = self.view.frame.size.height - 64 // 64 is a navigation bar height minus.
   let cellSize:CGSize = CGSize(width: width, height: Height )
   return cellSize
}