collectionView:layout:sizeForItemAt 未调用 swift 4 iOS 11

Posted

技术标签:

【中文标题】collectionView:layout:sizeForItemAt 未调用 swift 4 iOS 11【英文标题】:collectionView:layout:sizeForItemAt not called swift 4 iOS 11 【发布时间】:2017-10-23 18:50:12 【问题描述】:
class HomeController: UICollectionViewController, UICollectionViewDelegateFlowLayout 

    private let cellId = "cellId"

    override func viewDidLoad() 
        super.viewDidLoad()

        collectionView?.register(Cell.self, forCellWithReuseIdentifier: cellId)
        collectionView?.backgroundColor = UIColor.red
    

    override func numberOfSections(in collectionView: UICollectionView) -> Int 
        return 1
    

    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
        return 3
    

    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellId, for: indexPath) as! Cell
        return cell
    

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


class Cell: UICollectionViewCell 
    override init(frame: CGRect) 
        super.init(frame: frame)

        setup()
    

    required init?(coder aDecoder: NSCoder) 
        fatalError("init(coder:) has not been implemented")
    

    func setup() 
        backgroundColor = UIColor.black
    

numberOfSectionsnumberOfItemsInSection 被调用(根据断点),但 cellForItemAtsizeForItemAt 从未被调用。

我没看出有什么不对吗?

更新:(我如何在 AppDelegate 中创建 HomeController)

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 

    window = UIWindow(frame: UIScreen.main.bounds)
    window?.makeKeyAndVisible()

    let layout = UICollectionViewLayout()
    let homeController = HomeController(collectionViewLayout: layout)
    window?.rootViewController = UINavigationController(rootViewController: homeController)

    return true

【问题讨论】:

您是否以编程方式制作集合视图?如果不删除该行 -: collectionView?.register(Cell.self, forCellWithReuseIdentifier: cellId),并使用情节提要中提供的标识符 我正在以编程方式进行。没有故事板。 @VanDuTran 你在使用 XIB 吗?不,那么你是如何创建 HomeController 的实例的 @Jack 我用更多代码更新了我的帖子。我没有使用 XIB。这一切都是程序化的。 【参考方案1】:

你正在使用UICollectionViewLayout()

你应该use -

 let layout = UICollectionViewFlowLayout()

【讨论】:

以上是关于collectionView:layout:sizeForItemAt 未调用 swift 4 iOS 11的主要内容,如果未能解决你的问题,请参考以下文章