为啥 UICollectionView 的委托方法不起作用?

Posted

技术标签:

【中文标题】为啥 UICollectionView 的委托方法不起作用?【英文标题】:Why does the UICollectionView's delegate methods don't work?为什么 UICollectionView 的委托方法不起作用? 【发布时间】:2019-11-17 22:55:48 【问题描述】:

我创建了一个collectionView 并使它的委托符合附加到主ViewControllerUICollectionViewDelegateFlowLayout 协议,以便修改UICollectionView's 单元格的某些方面。 最初我是这样做的:

override func viewDidLoad() 
    super.viewDidLoad()
    self.collectionView.delegate = self 


然后我意识到这不起作用,因为有一个错误,所以我修复了它:

 override func viewDidLoad() 
    super.viewDidLoad()
    self.collectionView.delegate = self as? UICollectionViewDelegateFlowLayout


问题是我尝试在 ViewController 中实现的每个方法在运行时似乎都不起作用。

f.e.我在这里实现了这个方法:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 

    return CGSize(width: collectionView.frame.width/3, height: collectionView.frame.width/3)


但它在应用程序运行期间不起作用。

【问题讨论】:

【参考方案1】:

“所以我把它修好了”

你让错误消失了,但你没有修复它。您需要让您的视图控制器类真正采用UICollectionViewDelegateFlowLayout,方法是将其添加到其类声明中,如下所示:

class ProfileViewController: UIViewController, UICollectionViewDelegateFlowLayout 

或将其添加到视图控制器的扩展中,如下所示:

extension ProfileViewController: UICollectionViewDelegateFlowLayout 

【讨论】:

以上是关于为啥 UICollectionView 的委托方法不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

未调用 UICollectionView 内部 UITableView 的委托方法

UICollectionView 委托方法没有被正确调用

在实例化单元格之前调用 UICollectionView 委托方法?

UICollectionView 未显示 & 未调用委托/数据源方法

UICollectionView:如何在委托方法中设置特定项目后获取项目大小

UICollectionView如何从委托中重新加载数据