ios - 为消息创建气泡 View

标签 ios swift xcode nslayoutconstraint

我想让单元格中的文本在其后面有气泡 View 。

目前消息文本在一个容器中,所以它只能变得这么大,

每个单元格都有来自核心数据的消息文本属性,因此消息标签的大小不同。

由于 View 层次结构,我似乎必须预测每个单元格的气泡大小,因为它位于实际的消息标签 View 下。

所以我想真正的问题是如何根据每个单元格文本成员动态调整 View 大小。

最佳答案

使用 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

关于ios - 为消息创建气泡 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43691897/

相关文章:

ios - 检查iOS应用程序是否从推送中正常启动

ios - Stripe iOS 更改后退按钮标题

objective-c - 使用 Objective C 发送 POST 到 Web 服务器

iphone - 如何在 UIImage 中写一些带有特殊字符的文本?

ios - 由于未捕获的异常 'NSUnknownKeyException' 而终止应用程序,原因 : this class is not key value coding-compliant for the key Label2. '

ios - 如何从 NSString 中删除双引号和括号

ios - XMPP 服务器未与 e-Jabberd 连接 - 始终返回 "False"

ios - 在用作导航项的 UISegmentedControl 上模拟角标(Badge)

ios - 使用 UIImagePickerController() 选择图像会自动旋转它们

ios - 未发现 Xcode swift 测试