Sample Position incorrect!

I have finished this tutorial.

but, the position of incoming photo is not correct.

this is my app screenshot.

my code…
func observeMessages() {
messageRef.observe(.childAdded , with: { snapshot in
print(snapshot.value)

        if let dict = snapshot.value as? [String: AnyObject] {
            
            let MediaType = dict["MediaType"] as! String
            let senderId = dict["senderId"] as! String
            let senderName = dict["senderName"] as! String
            
            //--------------------------------------------------------------------------
            //For ProfileIcon Display
            self.observeUsers(id: senderId)
            //--------------------------------------------------------------------------
            
            //For Asynchronization
            let startTime = CFAbsoluteTimeGetCurrent()
            
            switch MediaType {
                
            case "TEXT":
                let text = dict["text"] as! String
                self.messages.append(JSQMessage(senderId: senderId, displayName: senderName, text: text))
                
                print("Text message: \(CFAbsoluteTimeGetCurrent() - startTime)")
                
            case "PHOTO":                    
                let photo = JSQPhotoMediaItem(image: nil)
                let fileUrl = dict["fileUrl"] as! String
                let downloader = SDWebImageDownloader.shared()
                downloader.downloadImage(with: NSURL(string: fileUrl)! as URL, options: [], progress: nil, completed: { (image, data, error, finished) in
                    print(Thread.current)
                    
                    DispatchQueue.main.async{
                        photo?.image = image
                        self.collectionView.reloadData()
                    }   //3
                
                })
                
                self.messages.append(JSQMessage(senderId: self.senderId, displayName: senderName, media: photo))

// JSQSystemSoundPlayer.jsq_playMessageSentSound()
// self.finishSendingMessage()

                //print("Photo message: \(CFAbsoluteTimeGetCurrent() - startTime)")
                
                if self.senderId == senderId {
                    photo?.appliesMediaViewMaskAsOutgoing = true
                } else {
                    photo?.appliesMediaViewMaskAsOutgoing = false
                }
                
                
                
                
            case "VIDEO":
                let fileUrl = dict["fileUrl"] as! String
                let video = NSURL(string: fileUrl)
                let videoItem = JSQVideoMediaItem(fileURL: video as URL!, isReadyToPlay: true)
                self.messages.append(JSQMessage(senderId: self.senderId, displayName: senderName, media: videoItem))
                
                print("Video message: \(CFAbsoluteTimeGetCurrent() - startTime)")
                
                if self.senderId == senderId {
                    videoItem?.appliesMediaViewMaskAsOutgoing = true
                } else {
                    videoItem?.appliesMediaViewMaskAsOutgoing = false
                }
                
            default:
                print("unknown data type")
            }
            //---------------------------------------------------        
            self.collectionView.reloadData()
            
        }
    })
}