ios - Swift 4 中的 UICollectionViewController 未调用 cellForItemAt 函数

标签 ios swift uicollectionview swift4 uicollectionviewdelegate

这看起来很基本,但我无法让它在 Swift 4 中工作。

所以我有以下 UICollectionViewController 的实现

class TestController: UICollectionViewController, UICollectionViewDelegateFlowLayout {

    override func viewDidLoad() {
        super.viewDidLoad()

        collectionView?.register(MyCell.self, forCellWithReuseIdentifier: "default")
    }

    override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        return collectionView.dequeueReusableCell(withReuseIdentifier: "default", for: indexPath)
    }

    override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 2
    }


    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return .init(width: view.frame.width, height: 100)
    }
}

虽然正在调用 ... numberOfItems ... 方法,但 ... cellForItemAt indexPath ... 方法并未被调用。

我错过了什么?

这是单元格的代码

class MyCell: UICollectionViewCell {
    override init(frame: CGRect) {
        super.init(frame: frame)
        backgroundColor = .green
    }

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

此外,我没有使用 Storyboard,因此我在 AppDelegate 类中实例化此 Controller ,如下所示:

...
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        window = UIWindow()
        window?.makeKeyAndVisible()

        window?.rootViewController = UINavigationController(rootViewController: TestController(collectionViewLayout: .init()))

        return true
    }
...

最佳答案

而不是

window?.rootViewController = UINavigationController(rootViewController: TestController(collectionViewLayout: .init()))

在 didFinishLaunchingWithOptions 方法中使用这个

 window?.rootViewController = UINavigationController(rootViewController: TestController(collectionViewLayout: UICollectionViewFlowLayout()))

关于ios - Swift 4 中的 UICollectionViewController 未调用 cellForItemAt 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51911833/

相关文章:

ios - UICollectionView 在 iOS 11 上覆盖全屏

ios - 如何显示UICollectionViewCell的MenuController?

c# - UITest 失败,返回 : "SetUp : System.InvalidOperationException"

ios - 如何为 UITabBarController 中的选项卡使用相同的 ViewController

ios - 如何在 Swift 中存储属性,就像在 Objective-C 中一样?

ios - 在 Swift 3.0 中使用 XMPP 阻止和取消阻止用户

ios - Twitter iOS 流媒体 API : no data being received

ios - Xamarin 统一 API : Native library binding: NSUInteger vs. 枚举

swift - 如何在 UIImageView 中一张一张的显示图片?

ios - 为UICollectionViewFlowLayout设置minimumLineSpacing没有效果,必须使用insetForSectionAtIndex函数吗?