2017-09-16 14 views
0

Lorsque je défile vers le bas dans la vue de table, le chargement de TextView ralentit et le défilement est interrompu.Chargement de TextView avec retard et lent

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

     if arrayofCellData[indexPath.row].isDesc == false{ 
      let cell = Bundle.main.loadNibNamed("imagesTableViewCell", owner: self, options: nil)?.first as! imagesTableViewCell 
      let indexA = self.arrayofCellData[indexPath.row].text 
      let path = "http://a"+indexA! 
      let url = URL(string: path) 
      cell.detailsImg.sd_setImage(with: url) 
      return cell 

     } 
      else { 
      let cell = Bundle.main.loadNibNamed("imagesTableViewCellDesc", owner: self, options: nil)?.first as! imagesTableViewCellDesc 

      let textD = self.arrayofCellData[indexPath.row].text! 
      let style = NSMutableParagraphStyle() 
      style.lineSpacing = 12 
      let attributes = [NSParagraphStyleAttributeName : style] 
      cell.descText.attributedText = NSAttributedString(string: textD, attributes:attributes) 
         cell.descText.textColor = UIColor.white 
         cell.descText.font = UIFont(name: (cell.descText.font?.fontName)!, size: 16) 
         cell.descText.textAlignment = .right 


      return cell 
     } 
    } 
+0

Comment 'sd_setImage' est-il défini? –

+0

Bonjour @Lamiya, lorsque vous travaillez avec TableView, n'utilisez pas Bundle.main.loadNibNamed, utilisez celui-ci dequeueReusableCellWithIdentifier. –

+0

Je pense que le retard se produit car il semble que vous rechargiez les images chaque fois que vous construisez une cellule et que vous ne les cachez pas n'importe où. En fonction du nombre d'images que vous avez, vous pouvez les charger par le biais d'un processus asynchrone lorsque la table est initialisée, puis les enregistrer dans votre modèle de données, puis les charger à partir de là, plutôt que de créer un http. : demande à chaque fois. – Sparky

Répondre

0

Ces deux lignes ci-dessous sont la cause racine de votre calorifugeage. Vous essayez d'utiliser le nouveau TableViewCell à chaque fois.

let cell = Bundle.main.loadNibNamed("imagesTableViewCell", owner: self, options: nil)?.first as! imagesTableViewCell 

let cell = Bundle.main.loadNibNamed("imagesTableViewCellDesc", owner: self, options: nil)?.first as! imagesTableViewCellDesc 

Par conséquent, pour résoudre ce que vous devez utiliser dequeueReusableCellWithIdentifier dans votre if and else statement comme ci-dessous

let cell = tableView.dequeueReusableCellWithIdentifier("imagesTableViewCell", forIndexPath: indexPath) as imagesTableViewCell 

let cell = tableView.dequeueReusableCellWithIdentifier("imagesTableViewCellDesc", forIndexPath: indexPath) as imagesTableViewCellDesc 

et ne pas oublié d'enregistrer votre plume dans viewDidLoad() comme ce

tableView.register(UINib(nibName: "imagesTableViewCellDesc", bundle: nil), forCellReuseIdentifier: "imagesTableViewCellDesc") 
tableView.register(UINib(nibName: "imagesTableViewCell", bundle: nil), forCellReuseIdentifier:"imagesTableViewCell") 

En ce qui concerne comme imageLoading est concerné, je ne pense pas qu'il sera en retard votre défilement parce que je pense que vous utilisez SDWebImage bibliothèque qui automatique met en cache les images et fonctionne de manière asynchrone.

+0

en utilisant dequeueReusableCellWithIdentifier return nil cell – Lamiya

+0

@Lamiya avez-vous d'abord enregistrer votre nib dans 'viewDidLoad'? Si ce n'est pas le cas, faites-le d'abord –

+0

Je l'ai fait mais encore il revient nul – Lamiya