如何使用 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%
。
好的,有几个注意事项:
如果您还没有,请通过以下方式使您的资产可拉伸(角落不拉伸,但只有中心拉伸):
- 选择资产并放大以便更好地细化切片;
- 在 Xcode 菜单中,选择“编辑器”»“显示切片”;
- 点击“开始切片”:
- 点击中间的“水平和垂直拉伸”按钮:
- 将您的指南移动到您想要的位置:
- 现在,当您使用这个新的可拉伸资产添加图像视图并选择“缩放以适合”的“内容模式”时,它将以中心拉伸但边缘不拉伸的方式缩放:
另请参阅 Xcode 文档 “Add a resizable area to an image”。
在您的单元格中,现在只需添加此图像视图和标签:
- 定义要从图像视图的边缘插入的标签的 leading/trailing/top/bottom 约束;
- 将标签的行数定义为零;
- 将图像视图的宽度定义为“>=”容器视图宽度(乘数为 66%);
- 显然也要定义你的泡泡对其父视图的适当 leading/trailing/top/bottom 约束;和
- 确保您的单元格使用自动单元格高度。
为了完整起见,另一种方法是制作一个 @IBDesignable
视图,您可以在其中使用 CAShapeLayer
自己绘制气泡,其 path
是 cgPath
的 UIBezierPath
。这就是我在聊天应用程序中所做的。但这种可拉伸图像方法也很有效。
顺便说一句,如果您的演讲者和听众气泡颜色不同,请注意您可能希望为 RTL 语言翻转这些气泡的再现。
我目前正在尝试为我的应用程序实现聊天,但由于我是 Swift
开发的新手,所以我被困在必须为其创建 TableView
单元格的部分.我找到了 "chat bubbles" 的 2 张 png 图片(一张用于接收,一张用于发送)。
我将它们放在 Assets
中,然后将它们加载到 ImageView
中。现在我的问题是如何在 ImageView
中放置一个 Label
并根据 Label
中的文本行数重新缩放它。气泡不应超过屏幕宽度的 66%
。
好的,有几个注意事项:
如果您还没有,请通过以下方式使您的资产可拉伸(角落不拉伸,但只有中心拉伸):
- 选择资产并放大以便更好地细化切片;
- 在 Xcode 菜单中,选择“编辑器”»“显示切片”;
- 点击“开始切片”:
- 点击中间的“水平和垂直拉伸”按钮:
- 将您的指南移动到您想要的位置:
- 现在,当您使用这个新的可拉伸资产添加图像视图并选择“缩放以适合”的“内容模式”时,它将以中心拉伸但边缘不拉伸的方式缩放:
另请参阅 Xcode 文档 “Add a resizable area to an image”。
在您的单元格中,现在只需添加此图像视图和标签:
- 定义要从图像视图的边缘插入的标签的 leading/trailing/top/bottom 约束;
- 将标签的行数定义为零;
- 将图像视图的宽度定义为“>=”容器视图宽度(乘数为 66%);
- 显然也要定义你的泡泡对其父视图的适当 leading/trailing/top/bottom 约束;和
- 确保您的单元格使用自动单元格高度。
为了完整起见,另一种方法是制作一个 @IBDesignable
视图,您可以在其中使用 CAShapeLayer
自己绘制气泡,其 path
是 cgPath
的 UIBezierPath
。这就是我在聊天应用程序中所做的。但这种可拉伸图像方法也很有效。
顺便说一句,如果您的演讲者和听众气泡颜色不同,请注意您可能希望为 RTL 语言翻转这些气泡的再现。