【问题标题】:CollectionView doesn't show any CollectionViewCellCollectionView 不显示任何 CollectionViewCell
【发布时间】:2021-12-01 03:52:55
【问题描述】:

我创建了一个通用的 UIView 类,其中包含一个 UICollectionView。如下所示。 (下面的类也处理带有默认值的 UICollectionView 的协议)

class MyCollectionView: BaseView<CollectionViewModel> {

private lazy var myCollectionView: UICollectionView = {
    let temp = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewLayout()) // setting initial collectionView
    temp.translatesAutoresizingMaskIntoConstraints = false
    temp.delegate = self
    temp.dataSource = self
    temp.register(CollectionViewCell.self, forCellWithReuseIdentifier: CollectionViewCell.identifier)
    temp.clipsToBounds = true
    
    return temp
 }() 
}

我创建了一个MyCollectionView(上面的类)的实例,并作为子视图添加到MainViewController(下面的类)。这样做让我将 MyCollectionView 显示为 MainViewController 的子视图。到目前为止我已经完成了。

class MainViewController: UIViewController {

private lazy var collectionView: MyCollectionView = {
    let temp = MyCollectionView()
    temp.translatesAutoresizingMaskIntoConstraints = false
    temp.backgroundColor = .black
    
    
    return temp
}()

override func viewDidLoad() {
    super.viewDidLoad()
    view.addSubview(collectionView)
    setUpConstraintsAndViews()
    // Do any additional setup after loading the view.
}

后来我尝试制作 UICollectionViewCell 类并将其注册到 myCollectionView。但我仍然看不到屏幕上的任何单元格。我可能会遗漏什么?

【问题讨论】:

  • collectionView 的框架是什么?是否调用了数据源方法? cellForItemAt、numberOfItemsInSection 等?
  • @Larme 集合视图有约束而不是框架。它的约束被定义为视图的约束。所以我会伸展以填充视图。 CellForItem at 有一个 dequeReusableCell ,它是一个自定义单元格。 numberofItemsInSection 是静态的 100

标签: ios swift uiview uicollectionview uicollectionviewcell


【解决方案1】:

您的MyCollectionView 类不是UICollectionView。它没有UICollectionView 的子视图,它有一个私有变量myCollectionView,用于创建集合视图。

据我所知,您正在添加MyCollectionView 的实例作为MainViewController 的子视图。我不明白这如何将UICollectionView 添加到您的视图MainViewController

MyCollectionView 的消费者应该如何访问它拥有的集合视图?

【讨论】:

  • 我尝试做的是,添加 MainViewController 一个 MyCollectionView,它是一个 UIView,它包含一个 UICollectionView。调整 MyCollectionView 中的委托和数据源以摆脱 MainViewController 中的那些功能
  • 您的MyCollectionView 如何包含UICollectionView?将集合视图添加为MyCollectionView 的子视图的代码在哪里?
  • 在 MyCollectionViewClass 中,像这样。在 viewDidLoad 内部添加: override func viewDidLoad() { super.viewDidLoad() view.addSubview(collectionView) setUpConstraintsAndViews() // 加载视图后进行任何其他设置。 }
  • 我明白你的意思。通过直接创建 UICollectionView 并特别设置 UICollectionViewFlowLayout() 直接解决了我的问题。我只是想直接将包含 UICollectionView 作为子视图的 View 添加到 MainViewController 可能让我摆脱了 UICollectionView 协议。
  • 您的 MyCollectionView 类似乎是 UIView,而不是 UIViewControllerviewDidLoad()UIViewController 的一个方法。不会在UIView 上调用该方法。但是您需要编辑您的问题以提供我们需要的详细信息以便为您提供帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
相关资源
最近更新 更多