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)JokowiRIMegawatiRIDepois 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?