具有不同数量项目的 CollectionView,项目应填充集合视图

CollectionView with different number of items, items should fill the collection view

我有一个场景,我有 X 个标签(或按钮)。它们应该出现在水平集合视图中。不应该有滚动。问题是 lables/buttons 的数量可以改变 (0-5)。

最好的办法是为每个项目使用宽度相等的 StackView,但我不能使用它,因为它需要 iOS 9。(我也需要 iOS 8.0 的兼容性-.-)

所以我构建了一个集合视图,禁用滚动并想为我的单元格动态设置高度和宽度。

我得到了我的 collectionView

的 height/width
heightOfLabel = testModeLoginCollectionView.frame.height
widthOfLabel = testModeLoginCollectionView.frame.width / 
                   CGFloat(array5.count)

结果是testModeLoginCollectionView.frame.width = 568.0 标签宽度 113.6 array5 = 5 项

我用这个方法调整我的单元格大小:

 func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {

     let c = CGSizeMake(heightOfLabel!, widthOfLabel!);
     return c
  }

他应该将单元格的宽度设置为 113.6 和 33.0 但它看起来像这样:

我尝试了一点 Aspect Fit、Scale to Fill 等,但变化不大。它太大或太小。

有人有想法吗?除了集合视图,我还会使用另一种技术。

when did i store the values in my variables?

override func viewDidLoad() {

    testModeLoginCollectionView.delegate = self
    testModeLoginCollectionView.dataSource = self

    heightOfLabel = testModeLoginCollectionView.frame.height
    widthOfLabel = testModeLoginCollectionView.frame.width / CGFloat(array5.count)
    print("testModeLoginCollectionView.frame.width \(testModeLoginCollectionView.frame.width)")
    print("widthOfLabel \(widthOfLabel)")

}

我在viewDidAppear上试过了,没区别

viewDidLayoutSubviews 视图拥有正确的框架后。 这样就可以在viewDidLayoutSubviews中reloadData了。 但我还有一个 solution:you 可以用 https://github.com/forkingdog/FDStackView 它和 uistackview

一样 api