imagem e rótulo no construtor de interface sobrepõem meus dados na célula TableView

Sou iniciante no desenvolvimento do iOS e quero criar um aplicativo clone do instagram, e tenho um problema ao criar o feed de notícias do aplicativo clone do instagram.

Então, eu estou usando o Firebase para armazenar a imagem e o banco de dados. depois de postar a imagem (carregando os dados no Firebase), desejo preencher a exibição da tabela usando os dados enviados da minha base de firmas.

Mas quando executo o aplicativo, a imagem e o rótulo fictícios do meu storyboard se sobrepõem aos dados baixados que eu coloquei na exibição da tabela. os dados que eu baixar eventualmente serão exibidos depois que eu rolar para baixo.

Aqui está o gif quando executo o aplicativo:

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

Existem 3 usuários exibidos no .gif

nome de usuário (o manequim do storyboard)JokowiRIMegawatiRI

Depois de baixar a imagem de forma assíncrona do Firebase (depois que o indicador de carregamento for descartado), espero que o MegawatiRI seja exibido na parte superior da tabela, mas o manequim seja exibido primeiro, mas depois que eu rolar para baixo e voltar ao topo, o MegawatiRI acabará Aparece.

Acredito que o MegawatiRI foi baixado com sucesso, mas não sei por que a imagem fictícia parece se sobrepor aos dados reais. Não quero que o manequim seja exibido quando meu aplicativo estiver em execução.

Aqui está a captura de tela da célula protótipo:

E aqui estão os códigos simplificados do controlador de exibição de tabela:

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
    }


    }

E aqui está o código simplificado da célula de exibição de tabela:

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)

                }


            }

        }

Então, o que faz com que a imagem fictícia se sobreponha aos meus dados baixados?