2017-03-17 89 views
1

因此,我創建了一個消息類型的應用程序,它由一些UITextView塊組成,其中包含不同長度的文本,這些塊位於「泡泡」UIView中。估計一些文本的UICollectionView單元格的大小

let textView: UITextView = { 
    let text = UITextView() 
    text.text = "SAMPLE" 
    text.translatesAutoresizingMaskIntoConstraints = false 
    text.backgroundColor = .clear 
    text.textColor = .white 
    return text 
}() 
let bubbleView: UIView = { 
    let view = UIView() 
    view.backgroundColor = UIColor(r: 0, g: 137, b: 247) 
    view.layer.cornerRadius = 14 
    view.layer.masksToBounds = true 
    view.translatesAutoresizingMaskIntoConstraints = false 
    return view 
}() 
var bubbleWidthAnchor: NSLayoutConstraint? 

    bubbleView.rightAnchor.constraint(equalTo: self.rightAnchor, constant: -8).isActive = true 
    bubbleView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true 
    bubbleWidthAnchor = bubbleView.widthAnchor.constraint(equalToConstant: 250) 
    bubbleWidthAnchor?.isActive = true 
    bubbleView.heightAnchor.constraint(equalTo: self.heightAnchor).isActive = true 

    textView.leftAnchor.constraint(equalTo: bubbleView.leftAnchor, constant: 8).isActive = true 
    textView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true 
    textView.rightAnchor.constraint(equalTo: bubbleView.rightAnchor).isActive = true 
    textView.heightAnchor.constraint(equalTo: self.heightAnchor).isActive = true 

設置單元格的高度,我使用的是自定義的函數,它是 應該 不能正常工作。

自定義功能:

private func estimatedFrameForText(text: String) -> CGRect { 
    let size = CGSize(width: 250, height: 250) 
    let options = NSStringDrawingOptions.usesFontLeading.union(.usesLineFragmentOrigin) 

    return NSString(string: text).boundingRect(with: size, options: options, attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 16)], context: nil) 
} 

與我在sizeForItemAt函數調用UICollectionView

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
    var height: CGFloat = 80 //Arbitrary number 
    if let text = messages[indexPath.item].text { 
     height = estimatedFrameForText(text: text).height + 8 
    } 
    return CGSize(width: view.frame.width, height: height) 
} 

我有被...它沒有偉大的工作,簡單的問題: Example

任何想法,我錯了,或更好的解決方案來獲得我需要的估計大小細胞,取決於文字?

回答

2

事實證明,我所缺少的是在textView中設置文本大小。

text.font = UIFont.systemFont(ofSize: 16)的是必需的,因爲函數獲取估計規模有:

attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 16) 

所以,你必須同時定義是相同的。