无需滚动即可刷新UITableview

时间:2018-02-19 20:19:22

标签: ios iphone swift uitableview scroll

我从API获取了所有数据,并且我将其添加到tableView中的10个项目。

当我调用方法reloadData时,tableView会对不同的项目进行大量滚动。

这是我的代码

func getSystemFeedPublicationsSuccess(httpCode: Int, data: Data) {
   var jsonData = JSON(data)
   let publications = jsonData["content"]["publications"].array
   var indexPath = [IndexPath]()

   for publication in publications! {
       if publication["publication_image"].rawString() == "null" {}
       jsonDataTable.append(publication)

       let indexPathTemp = IndexPath(row: jsonDataTable.count - 1, section: 1)
       indexPath.append(indexPathTemp)
   }

   feedProtocol.tableView.reloadData()

   morePublications = jsonData["content"]["pending"].int!

   if(morePublications == 1) {
       feedProtocol.newPublication()
   } else {
       feedProtocol.noMorePublications()
   }
}

NewPublication和noMorePublications方法

func newPublication() {

   downloadingPost = false
}
func noMorePublications(){

   spinner.stopAnimating()
}

TableView数据源方法:

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


   if(indexPath.section == 0){

       switch jsonDataProfileArray[indexPath.row]["sort"].int! {
       case 0:
           let cell = tableView.dequeueReusableCell(withIdentifier: "MainInformationEntitiesTableViewCell") as! MainInformationEntitiesTableViewCell

           jsonDataProfileArray[indexPath.row]["height"] = JSON(cell.initView(infoBasic: jsonDataProfileArray[indexPath.row]))

           return cell
       case 1:
           let cell = tableView.dequeueReusableCell(withIdentifier: "ImageGalleryTableViewCell") as! ImageGalleryTableViewCell
           jsonDataProfileArray[indexPath.row]["height"] = JSON(cell.initView(galleryInfo: jsonDataProfileArray[indexPath.row]))
           return cell

       case 2:
           let cell = tableView.dequeueReusableCell(withIdentifier: "DescriptionAccountTableViewCell") as! DescriptionAccountTableViewCell
           jsonDataProfileArray[indexPath.row]["height"] = JSON(cell.initView(companyJson: jsonDataProfileArray[indexPath.row]))
           return cell

       case 3:
           let cell = tableView.dequeueReusableCell(withIdentifier: "suggestAccountTableViewCell") as! suggestAccountTableViewCell
           if((jsonDataProfileArray[indexPath.row]["height"]).int == nil){
               jsonDataProfileArray[indexPath.row]["height"] = JSON(cell.frame.height)  
               cell.initView(companiesArray: jsonDataProfileArray[indexPath.row]["similar_companies"].array!, companiesCount: jsonDataProfileArray[indexPath.row]["nCompanies"].int!)

           }

           return cell

       default:
           print("default")
       }


   }else{

       let cell = tableView.dequeueReusableCell(withIdentifier: "PublicationTemplateTableViewCell") as! PublicationTemplateTableViewCell
       cell.publicationTitleLabel.text = "\(indexPath.row)"
       return cell

   }

   let cell = UITableViewCell()
   return cell
}

1 个答案:

答案 0 :(得分:1)

我解决了这个问题。

我必须在表格的代表处添加estimateHeightForRowAt

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
   return HeightOffset
}

这有助于在加载这些单元格之前了解单元格的大小。