我希望我的单元格中的文本背后有一个气泡视图。
目前,消息文本位于容器内部,因此它只能变得如此之大,
每个单元格都有一个来自核心数据的消息文本属性,因此消息标签的大小不同。
由于视图层次结构,我似乎必须预测每个单元格的气泡大小,因为它在实际的消息标签视图下。
所以我想真正的问题是如何根据每个单元格文本成员动态调整视图大小。
答案 0 :(得分:0)
使用NSString中的boundingRect函数。
func estimateFrameForText(_ text: String) -> CGRect {
let size = CGSize(width: 250, height: 1000)
let options = NSStringDrawingOptions.usesFontLeading.union(.usesLineFragmentOrigin)
return NSString(string: text).boundingRect(with: size, options: options, attributes: [NSFontAttributeName: UIFont(name:"OpenSans",size:15)!], context: nil)
}
设置最大值(宽度,高度 - >在这种情况下为250和1000),添加文本正在使用的UIFont,这将计算标签文本大小。 将此功能用于气泡时,您应该添加一个+20高度的填充,+ 20宽度,这样气泡就不会接近文本。
我个人在cellForItem中使用它:
let width = estimateFrameForText(message.content).width + 20
cell.bubbleWidthAnchor?.constant = width