在为其轮廓创建Box之后,UITextView的大小和位置错误

时间:2018-01-27 14:49:55

标签: ios swift nsstring

我是通过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)
}

}

但是输出很奇怪,我很困惑

enter image description here

为什么它总是切断最后一根弦?在我看来,我正在使用正确的NSString.DrawingOptions,尤其是usesFontLeading计算大小,但为什么它削减了最后一个字符串?

1 个答案:

答案 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)