Ячейки же добавляются на основе каких-то данных, тоесть есть массив, и каждый раз когда ты вставляешь в массив данные через .append , они и будут добавляться в конец
Я понимаю ты хочешь понять как это все работает, но если цель конкретная, Чем изобретать велосипед, используй messageKit фреймворк это готовое решение того что тебе нужно