Swift: 添加一个标签并将其放在另一个标签下面

Swift: Add a label and place it underneath another label

我想使用来自数据库的文本以编程方式创建标签。

所以 for 循环正在用这个函数创建标签:

    func fillScrollViewWithLabels() {
    for message in messages {

        let label = UILabel(frame: CGRectMake(0, 0, 200, 21))
        label.text = message.message
        self.chatScrollView.addSubview(label)

    }
}

但是这个函数将标签一个放在另一个上面。

它应该看起来像一个信使 - 标签是文本消息,我认为 scrollView 是完美的。

我没有完全理解你的问题,但你可以随意使用 Scrolview 的子类 textview 来存储文本,而不是在每条消息中添加不同的文本。

我建议查看此 github repo 以熟悉聊天应用程序的概念。

编辑

还发现了这个 notification chat github repo 更轻量级的样本来检查。

像这样更新你的代码

   var yPos:CGFloat = 0.0
    let label = UILabel(frame: CGRectMake(0, yPos, 200, 21))
    for message in messages {
            let label = UILabel(frame: CGRectMake(0, yPos, 200, 21))
            label.text = message.message
            self.chatScrollView.addSubview(label)
            yPos = yPos+21;// you can also add spacing if you want
    }

您需要为标签的 Y 位置创建一个变量

var currentLabelYPosition : CGFloat = 0 // set to first y position

然后,当您遍历数组并创建标签时,您需要根据最后一个标签的 Y 位置获取它的 Y 位置,如下所示:

for message in messages {

    let label = UILabel(frame: CGRectMake(0, currentLabelYPosition, 200,21))
    label.text = message.message
    self.chatScrollView.addSubview(label)
    currentLabelYPosition + label.frame.size.height // Update this accordingly with any type of padding, offset, etc. 

}