Это происходит из-за повторного использования ячейки, поэтому в основном прокручиваемая ячейка выходит за пределы экрана и будет использоваться повторно, когда потребуется еще одна ячейка вниз.
В вашем подклассе UITableViewCell
вы можете реализовать метод prepareForReuse
, он вызывается, когда ячейка готова к повторному использованию, и вы можете установить для contentOffset значение 0, что-то вроде:
override func prepareForReuse() {
super.prepareForReuse()
scrollView.contentOffset = CGPoint(x: 0, y: 0)
}