如何使用 XCode 的 Interface Builder 创建气泡聊天 TableViewCell,就像在 Messenger 中一样?

How to create bubble chat TableViewCell like in Messenger using XCode's Interface Builder?

我目前正在尝试为我的应用程序实现聊天,但由于我是 Swift 开发的新手,所以我被困在必须为其创建 TableView 单元格的部分.我找到了 "chat bubbles" 的 2 张 png 图片(一张用于接收,一张用于发送)。 我将它们放在 Assets 中,然后将它们加载到 ImageView 中。现在我的问题是如何在 ImageView 中放置一个 Label 并根据 Label 中的文本行数重新缩放它。气泡不应超过屏幕宽度的 66%

好的,有几个注意事项:

  1. 如果您还没有,请通过以下方式使您的资产可拉伸(角落不拉伸,但只有中心拉伸):

    • 选择资产并放大以便更好地细化切片;
    • 在 Xcode 菜单中,选择“编辑器”»“显示切片”;
    • 点击“开始切片”:
    • 点击中间的“水平和垂直拉伸”按钮:
    • 将您的指南移动到您想要的位置:
    • 现在,当您使用这个新的可拉伸资产添加图像视图并选择“缩放以适合”的“内容模式”时,它将以中心拉伸但边缘不拉伸的方式缩放:

    另请参阅 Xcode 文档 “Add a resizable area to an image”

  2. 在您的单元格中,现在只需添加此图像视图和标签:

    • 定义要从图像视图的边缘插入的标签的 leading/trailing/top/bottom 约束;
    • 将标签的行数定义为零;
    • 将图像视图的宽度定义为“>=”容器视图宽度(乘数为 66%);
    • 显然也要定义你的泡泡对其父视图的适当 leading/trailing/top/bottom 约束;和
    • 确保您的单元格使用自动单元格高度。

为了完整起见,另一种方法是制作一个 @IBDesignable 视图,您可以在其中使用 CAShapeLayer 自己绘制气泡,其 pathcgPathUIBezierPath。这就是我在聊天应用程序中所做的。但这种可拉伸图像方法也很有效。

顺便说一句,如果您的演讲者和听众气泡颜色不同,请注意您可能希望为 RTL 语言翻转这些气泡的再现。