0
votes

TableView à l'intérieur de ScrollView, comment calculer la hauteur de tableview au moment de l'exécution?

Il y a une vue de tableau en vue de défilement, pour le défilement parfait, la hauteur de la vue de la table est nécessaire. Mais il y a une hauteur dynamique de cellule et un contenu multiple dans la cellule avec des données dynamiques comme l'image (calcul de la hauteur de l'image avec la bibliothèque Kingfisher) et du contenu (avec 0 nombre de lignes). Donc incapable de calculer la hauteur de chaque cellule. J'utilise donc ceci pour obtenir la hauteur de la cellule: -

let totalCount = self.itemArray.data1.count + self.itemArray.data2.count
   if totalCount != self.totalHeightOfTable.count {
      //Appending height of cell
       self.tableView.reloadData()
       self.totalHeightOfTable.append(cell.frame.height)
       self.heightOfPost = self.totalHeightOfTable
       if totalCount == self.totalHeightOfTable.count {
          // Call back to get height of tableView
           self.getTotalHeightOfTableView?(self.totalHeightOfTable)
        }
  } 

parce que la tableView est à l'intérieur d'une scrollview, je ne suis pas en mesure de calculer la hauteur de chaque cellule de la tableView dynamiquement ou au moment de l'exécution . La hauteur que j'obtiens au moment de l'exécution est plus grande et il y a un espace blanc vide à la fin de la tableView. Ainsi, la hauteur totale de la vue tableau est toujours supérieure à la somme de toutes les cellules de la vue tableau.

Structure de l'interface utilisateur attachée


0 commentaires

3 Réponses :


0
votes

Vous pouvez utiliser la hauteur du contenu Size par tableView.contentSize.height


0 commentaires

0
votes

Bienvenue dans Stackoverflow!

Vous pouvez certainement obtenir le contentSize , et obtenir la hauteur de celui-ci, de votre tableView. J'utilise cette méthode et je travaille à chaque fois.

Une façon de le faire est d'ajouter un observateur, comme ceci:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if let obj = object as? UITableView {
        if obj == self.tableView && keyPath == "contentSize" {
            if let newSize = change?[NSKeyValueChangeKey.newKey] as? CGSize {
                let height = newSize.height // <----- your height!
            }
        }
    }
}

puis remplacez la méthode de votre contrôleur, observeValue , comme ceci:

tableView.addObserver(self, forKeyPath: "contentSize", options: .new, context: nil)

Pour ajouter, il serait peut-être préférable que dans votre viewWillDisappear ou deinit , supprimez cet observateur.


0 commentaires

0
votes

J'ai compris votre problème selon lequel vous souhaitez calculer la hauteur du tableau dynamique avec la hauteur des cellules flexibles à l'intérieur de tableview et en fonction de cette hauteur, vous souhaitez mettre à jour la hauteur de votre parent scrollview contentSize .

Je veux vous dire que s'il vous plaît supprimez tous vos calculs de hauteur strong > et placez simplement cette fonction simple ci-dessous à côté de votre contrôleur de vue .

IMPORTANT: - Ne donnez aucun Contrainte de hauteur à votre vue de tableau si vous utilisez la mise en page automatique à partir de votre storyboard ou par programme.

veuillez prendre soin de votre les noms de variables de tableview et scrollview et remplacez-les respectivement .

   //MARK:- viewDidLayoutSubviews will call after dynamic height calculation automatically
override func viewDidLayoutSubviews() {
    
    //isScrollEnabled of table view  should be dissable because our table is inside scrollview.
    tableView.isScrollEnabled = false
    
    
    //if above tableView.contentSize.height   not zero and giving acurate value then proceed further and update our parent scroll view contentsize height for height.
    print(tableView.contentSize.height)
    
    
    
    //place some bottom peeding as you want
    let bottomPedding:CGFloat = 30
    
    
    //Finally update your scrollview content size with newly created table height + bottom pedding.
    scrollview.contentSize = CGSize.init(width: scrollview.contentSize.width, height:tableView.contentSize.height + bottomPedding)
    
    
}

si cela va travail puis fantastique puis super, reposez-vous, vous pouvez me contacter à tout moment, nous le découvrirons. asrathoreforiphone@gmail.com


2 commentaires

Je veux la même chose dans la cellule de vue de tableau Comme actuellement dans la cellule de tableau, il y a un autre tableau dans la cellule et je veux la hauteur de vue de tableau (qui est dans la cellule). Toute suggestion pour cela


D'accord, donnez-moi un peu de temps vous expliquera dans une vidéo. reste pour une action immédiate, vous pouvez contacter sur mon e-mail asrathoreforiphone@gmail.com