imagen y etiqueta en el generador de interfaces se superponen mis datos en la celda TableView

Soy un principiante en el desarrollo de iOS, y quiero hacer una aplicación de clonación de instagram, y tengo un problema al hacer el suministro de noticias de la aplicación de clonación de instagram.

Así que estoy usando Firebase para almacenar la imagen y la base de datos. después de publicar la imagen (cargando los datos en Firebase), quiero llenar la vista de tabla usando los datos cargados desde mi base de fuego.

Pero cuando ejecuto la aplicación, la imagen ficticia y la etiqueta de mi guión gráfico se superponen a los datos descargados que puse en la vista de tabla. los datos que descargue finalmente se mostrarán después de desplazarme hacia abajo.

Aquí está el gif cuando ejecuto la aplicación:

http://g.recordit.co/iGIybD9Pur.gif

Hay 3 usuarios que se muestran en el archivo .gif

nombre de usuario (el muñeco del guión gráfico)JokowiRIMegawatiRI

Después de descargar asincrónicamente la imagen de Firebase (después de que se descarta el indicador de carga), espero que MegawatiRI se muestre en la parte superior de la tabla, pero el muñeco aparecerá primero, pero después de desplazarme hacia abajo y volver a la parte superior, MegawatiRI eventualmente aparece.

Creo que MegawatiRI se descargó con éxito, pero no sé por qué la imagen ficticia parece superponerse a los datos reales. No quiero que se muestre el muñeco cuando se ejecute mi aplicación.

Aquí está la captura de pantalla de la célula prototipo:

Y aquí están los códigos simplificados del controlador de vista de tabla:

class NewsFeedTableViewController: UITableViewController {


    var currentUser : User!
    var media = [Media]()



    override func viewDidLoad() {
        super.viewDidLoad()



        tabBarController?.delegate = self


        // to set the dynamic height of table view
        tableView.estimatedRowHeight = StoryBoard.mediaCellDefaultHeight
        tableView.rowHeight = UITableViewAutomaticDimension

        // to erase the separator in the table view
        tableView.separatorColor = UIColor.clear

    }


    override func viewWillAppear(_ animated: Bool) {

        // check wheter the user has already logged in or not

        Auth.auth().addStateDidChangeListener { (auth, user) in

            if let user = user {

                RealTimeDatabaseReference.users(uid: user.uid).reference().observeSingleEvent(of: .value, with: { (snapshot) in

                    if let userDict = snapshot.value as? [String:Any] {
                        self.currentUser = User(dictionary: userDict)
                    }


                })

            } else {
                // user not logged in
                self.performSegue(withIdentifier: StoryBoard.showWelcomeScreen, sender: nil)
            }


        }

        tableView.reloadData()
        fetchMedia()



    }




    func fetchMedia() {

    SVProgressHUD.show()

    Media.observeNewMedia { (mediaData) in


        if !self.media.contains(mediaData) {
            self.media.insert(mediaData, at: 0)
            self.tableView.reloadData()
            SVProgressHUD.dismiss()
        }


        }

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: StoryBoard.mediaCell, for: indexPath) as! MediaTableViewCell


        cell.currentUser = currentUser
        cell.media = media[indexPath.section]



        // to remove table view highlight style
        cell.selectionStyle = .none



        return cell
    }


    }

Y aquí está el código simplificado de la celda de vista de tabla:

class MediaTableViewCell: UITableViewCell {

    var currentUser: User!
    var media: Media! {
        didSet {

            if currentUser != nil {
                updateUI()
            }

        }
    }

    var cache = SAMCache.shared()



    func updateUI () {


        // check, if the image has already been downloaded and cached then just used the image, otherwise download from firebase storage


        self.mediaImageView.image = nil
        let cacheKey = "\(self.media.mediaUID))-postImage"

        if let image = cache?.object(forKey: cacheKey) as? UIImage {
            mediaImageView.image = image
        } else {
            media.downloadMediaImage { [weak self] (image, error) in

                if error != nil {
                    print(error!)
                }


                if let image = image {
                    self?.mediaImageView.image = image
                    self?.cache?.setObject(image, forKey: cacheKey)

                }


            }

        }

Entonces, ¿qué hace que la imagen ficticia se superponga con mis datos descargados?

Respuestas a la pregunta(2)

Su respuesta a la pregunta