0

我在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
}



Table View 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 中立即加载和显示?谁能帮我?

4

1 回答 1

1

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

在表视图的 cellForRowAtIndexPath 中:

cell.collectionView.tag = indexPath.row

然后在集合视图的 numberOfItemsInSection 中:

return self.model.sets[collectionView.tag].subsets!.count
于 2021-11-20T20:12:34.873 回答