【问题标题】:Collection View inside Table does not load immediately in swift 3表内的集合视图不会立即在 swift 3 中加载
【发布时间】:2024-01-14 05:14:01
【问题描述】:

我在Home View Controller中添加了一个表格视图。
在表格视图中,我添加了集合视图。
首次运行应用程序时集合视图内的图像。然后,转到其他链接并返回主页,但集合视图中的图像不会立即显示,直到第二次滚动。
多次拉视图后,出现图像。
在“Collection.swift”中,
ViewDidLoad()中,

DispatchQueue.main.async {
    self.tableView.reloadData()
}

我还添加了 viewWillLayoutSubviews()

override func viewWillLayoutSubviews() {

    debugPrint("viewWillLayoutSubviews")
    DispatchQueue.main.async(execute: {() -> Void in
        self.tableView.reloadData()
        self.tableView.layoutIfNeeded()
    })   
}

我还重新加载收藏视图

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

    let mainThemeList = mainHomeThemeTable[(indexPath as NSIndexPath).row]
    self.prefs.set(mainThemeList.main_associated_url, forKey: "associated_home_url")
    let cell = tableView.dequeueReusableCell(withIdentifier: "homecell") as! HomeCategoryRowCell

    DispatchQueue.main.async {
        cell.categoryTitle.text = mainThemeList.main_name
        cell.mainAssociatedURL.text = mainThemeList.main_associated_url
        cell.categoryTitle.font = UIFont.boldSystemFont(ofSize: 17.0)
        cell.collectionView.reloadData()

    }

    return cell
}



表格视图单元格 (CollectionCell.swift) 文件中,

override func awakeFromNib() {
   self.collectionView.reloadData()
   self.collectionView.setNeedsLayout()
   self.collectionView.layoutIfNeeded() } 


override func layoutSubviews() {
    super.layoutSubviews()
     self.collectionView.reloadData()
     self.collectionView.setNeedsLayout()
     self.collectionView.layoutIfNeeded()


}

如何在 swift 3 中立即加载和显示?谁能帮帮我?

【问题讨论】:

  • collectionView.reloadData() 在表格视图的自定义单元格中很容易重新加载,如果没有加载表格视图重新加载然后留下评论我会给你另一个建议和代码进入视图 DidAppear()
  • 兄弟@BHAVIKPANCHAL,我在viewDidAppear 中添加了tableView.reloadData()。现在,当应用程序运行时,图像会立即显示。但是,当我转到其他页面并返回主页时,图像不显示,需要拉刷新。
  • 兄弟@BHAVIKPANCHAL,我更新了我的问题。兄弟你能看一下吗?
  • 我觉得你可以这样解决*.com/a/33364092/2893809

标签: uitableview uicollectionview imageview swift3.2


【解决方案1】:

您不能依赖调用的顺序。当前,您正在尝试将 setIndex 从表视图的 cellForRowAtIndexPath 传递给集合视图的委托方法。解决此问题的一种简单方法是,不要使用单个变量来传递行号,而是将其传递到集合视图的 tag 属性中。然后每个集合视图都会知道它的相关行号。即

在表格视图的 cellForRowAtIndexPath 中:

cell.collectionView.tag = indexPath.row

然后在collection view的numberOfItemsInSection中:

return self.model.sets[collectionView.tag].subsets!.count

【讨论】:

    最近更新 更多