2017-10-13 12 views
0

Je UITableView avec des méthodes:problème étrange avec l'affichage des cellules dans UITableView

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
override func numberOfSections(in tableView: UITableView) -> Int 
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

Ainsi, le problème est que Xcode fonctionne au premier

override func numberOfSections(in tableView: UITableView) -> Int 

qui me retourne 1. Plus tard, il exécute override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int ce qui me renvoie aussi 1.

MAIS je ne sais pas pourquoi après ces 2 méthodes, elle ne lance pas la méthode cellForRowAt et n'affiche aucune r ow sur mon UITableView.

Je ne sais pas ce qui se passe là-bas et pourquoi cela arrive. Avez-vous rencontré un tel problème et pourriez-vous s'il vous plaît m'aider à le réparer?

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if let fetchedResultsController = self.fetchedResultsController, let fetchedObjects = fetchedResultsController.fetchedObjects { 
     if !searchController.isActive { 
      print("numberOfRowsInSection fetchedObjects.count - \(fetchedObjects.count)") 
      return fetchedObjects.count 
     } else { 
      if let results = filteredResult[searchController.searchBar.selectedScopeButtonIndex] { 
      print("numberOfRowsInSection results.count - \(results.count)") 
       return results.count 
      } 
     } 
    } 
    print("numberOfRowsInSection - 0") 
    return 0 
} 

override func numberOfSections(in tableView: UITableView) -> Int { 
    if let frc = fetchedResultsController, frc.fetchedObjects?.count != 0 {  
     print("numberOfSections - 1")        
     return 1 
    } else { 
     print("numberOfSections - 0")    
     return 0 
    } 
} 
+0

Vérifiez le nombre de lignes et de sections dans ces méthodes. N'importe lequel d'entre eux sera zéro (0) ou Votre table peut ne pas être visible (zone visible de l'écran) – Krunal

+0

@Krunal oui. Cela semble logique. Mais j'ai vérifié ça plusieurs fois! Je ne reçois pas 0. Je ne vois que l'en-tête de mon UITableView, mais le champ lignes est vide –

+0

Avez-vous vérifié en ajoutant une instruction d'impression dans la méthode 'cellForRowAt', si elle fonctionne ou non, juste pour être sûr? – 3stud1ant3

Répondre

0

Ce qui est probablement passe est que votre cellule a une hauteur 0. Lorsque cela se produit, cellForRowAt ne sera pas appelé du tout, même si les autres méthodes renvoient un nombre section/row non nul. Je suppose que ce qui se passe est que vous pouvez utiliser la mise en page automatique pour votre cellule, mais vos contraintes ne permettent pas à la cellule de déterminer sa propre taille. Vous utilisez peut-être la mise en page automatique sans le savoir, puisque sur iOS 11, c'est désormais la valeur par défaut. Si vous utilisez des storyboards, vous pouvez définir la hauteur du prototype de cellule sur l'inspecteur d'attributs, au lieu de cocher la case automatic. Vous pouvez également le définir en code avec tableView.rowHeight ou en implémentant func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat