我是通过boundingrectwithsize函数尝试将封装测试封装到封闭框中。
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
if let messageText = messages?[indexPath.item].text {
let size = CGSize(width:view.frame.width,height: 1000)
let options = NSStringDrawingOptions.usesLineFragmentOrigin.union(.usesFontLeading)
let estimatedFrame = NSString(string: messageText).boundingRect(with: size, options: options, attributes: [NSFontAttributeName: UIFont.systemFont(ofSize: 18)], context: nil)
return CGSize(width: view.frame.width,height: estimatedFrame.height)
}
return CGSize(width:view.frame.width,height: 100)
}
}
但是输出很奇怪,我很困惑
为什么它总是切断最后一根弦?在我看来,我正在使用正确的NSString.DrawingOptions,尤其是usesFontLeading计算大小,但为什么它削减了最后一个字符串?
答案 0 :(得分:1)
UITextView
默认添加填充。使用NSString
尺寸调整方法调整尺寸时请不要考虑这一点。您可以使用以下命令关闭填充:
myTextView.textContainerInset = UIEdgeInsets.zero
myTextView.textContainer.lineFragmentPadding = 0
或者将它们添加到您的尺寸:
CGSize(width: view.frame.width,height: estimatedFrame.height + myTextView.textContainerInset.top + myTextView.textContainerInset.bottom)