NSString的bo​​undingRect函数误导行为

时间:2018-01-30 10:08:04

标签: ios swift nsstring

当我试图通过NSString函数boundingRect包装到框中时注意初始Insets(8,0,8,0),所以我尝试用以下方法计算我的文本的每一帧:

let size = CGSize(width:250 ,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)

然后当我创建我的文本框架

cell.messageTextView.frame = CGRect(x: 48 + 8, y: 0, width: estimatedFrame.width , height: estimatedFrame.height + 20)

enter image description here

它削减了我的文字。即使没有默认的填充和宽度的插入。 但是当我向width参数添加任意数字时,我正确地包装了全文。 enter image description here

有人知道这种行为的真正原因吗?甚至更多我可以添加宽度参数而不是16点甚至更少像8.3425点它会正常工作但如果我通过8.3424它会赢得#t?t?没有boundingRect func应该为我的包装盒提供合适的尺寸吗?

1 个答案:

答案 0 :(得分:0)

UITextView具有无法显示文本的插图(请注意,文本不会从灰色背景开始的位置开始)。如果只设置视图的宽度,则文本的实际空间将受这些插入的限制。

请参阅UITextView.textContainerInsets。您需要将它们添加到您正在设置的框架的宽度和高度。