My tableView scrolling is jumping when I reload tableView with new data. Here is the code for cellForRowAtIndexPath:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
     let section = indexPath.section
     let index = indexPath.row
     let info = data[sections[section]]![index] as ConversationMessage
     if info.from == .Me {
         var cell: ConversationDialogMeTableCell = tableView.dequeueReusableCellWithIdentifier("meCell", forIndexPath: indexPath) as! ConversationDialogMeTableCell
         cell.backgroundColor = UIColor.clearColor()
         cell.selectionStyle = .None
         cell.messageLabel.text = info.text
         return cell
     } else if info.from == .Other {
         var cell: ConversationDialogOtherTableCell = tableView.dequeueReusableCellWithIdentifier("otherCell", forIndexPath: indexPath) as! ConversationDialogOtherTableCell
         cell.backgroundColor = UIColor.clearColor()
         cell.selectionStyle = .None
         cell.personName.textColor = UIColor(hex: 0x6d6d6d)
         cell.messageContainerView.backgroundColor = UIColor(hex: 0x6d6d6d)
         cell.messageContainerView.layer.cornerRadius = 5
         cell.messageContainerView.clipsToBounds = true
         Alamofire.request(.GET, info.personImage).response {
             (request, response, data, error) in
             let image = UIImage(data: data!, scale: 1)!
             cell.personImage.image = image
             cell.personImage.contentMode = UIViewContentMode.ScaleAspectFill
             cell.personImage.layer.cornerRadius = cell.personImage.frame.height / 2
             cell.personImage.clipsToBounds = true
         }
         cell.personName.text = info.personName
         cell.personMessage.text = info.text
         return cell
    }
    return UITableViewCell()
}
For the first load scrolling is smooth, but if I will add new data in my tableView and call reloadData() the scrolling is jumping when new cells are shown.
Here is the code where I insert new data to my model:
func client(client: PubNub!, didReceiveMessage message: PNMessageResult!) {
    if message.data.subscribedChannel == self.channel {
        if let messageInfo: AnyObject = message.data.message {
            let date = (messageInfo["date"] as! String).getDateString()
            let messageText = messageInfo["message"] as! String
            let from: ConversationMessage.sendFromType = (messageInfo["userID"] as! String) == self.userID ? .Me : .Other
            let image = messageInfo["userPhoto"] as! String
            let name = messageInfo["userName"] as! String
            if data[date] != nil {
                data[date]!.append(ConversationMessage(text: messageText, from: from, personImage: image, personName: name, date: messageInfo["date"] as! String))
            } else {
                data[date] = [ConversationMessage(text: messageText, from: from, personImage: image, personName: name, date: messageInfo["date"] as! String)]
            }
            for section in self.sections {
                self.data[section]! = sorted(self.data[section]!) { Utils.compareDateTime($0.date, with: $1.date, order: .OrderedAscending) }
            }
            tableView.reloadData()
            tableViewScrollToBottom(false)
        }
    }
}
Maybe it happens because of function to scroll tableView to bottom:
func tableViewScrollToBottom(animated: Bool) {
    let delay = 0.1 * Double(NSEC_PER_SEC)
    let time = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
    dispatch_after(time, dispatch_get_main_queue(), {
       let numberOfSections = self.tableView.numberOfSections()
       let numberOfRows = self.tableView.numberOfRowsInSection(numberOfSections - 1)
       if numberOfRows > 0 {
           let indexPath = NSIndexPath(forRow: numberOfRows - 1, inSection: (numberOfSections - 1))
           self.tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Bottom, animated: animated)
       }
    })
}
One more thing. Should I cache uploaded images? Maybe this is causing jumping scroll. Can someone help me to solve my issue?