2017-02-11 67 views
1

我正在尝试使用textview内部的collectionviewcell.Build构建collectionview,我想根据textview计算单元格的高度。如何为collectionviewcell获取uitextview高度

我使用sizeThatFits方法来计算高度,但随着文本变大,collectionviewcell的高度与文本不匹配。

我试图用boundingRect但结果也是不正确

result picture

是他们无论如何计算的TextView的正确的高度?或者如何解决这个问题。

谢谢!

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
    let textview = UITextView() 

    textview.text = statusText[indexPath.row] 

    let actualsize = textview.sizeThatFits(CGSize(width: collectionView.frame.size.width, height: CGFloat.greatestFiniteMagnitude)) 

    return CGSize(width: collectionView.frame.size.width, height: actualsize.height) 

} 
+0

你尝试''boundingRectWithSize? –

+0

嗯,我按照上面的说法试过了boundingRect,结果仍然不正确 –

回答

1

默认情况下,当您创建的UITextView一个新实例的字体属性是nil,你必须在字体的UITextView使用sizeThatFit前关联。

如果您使用的是默认字体,只需添加textview.font = UIFont.systemFont(ofSize: 14)

改变你的功能是这样的:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
    let textview = UITextView() 

    textview.text = statusText[indexPath.row] 
    textview.font = UIFont.systemFont(ofSize: 14) 

    let actualsize = textview.sizeThatFits(CGSize(width: collectionView.frame.size.width, height: CGFloat.greatestFiniteMagnitude)) 

    return CGSize(width: collectionView.frame.size.width, height: actualsize.height) 

}