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

时间:2016-03-30 15:11:52

标签: ios swift width collectionview

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

完美的事情是对每个项目使用宽度相等的StackView,但我不能使用它,因为它需要iOS 9.(我也需要iOS 8.0的兼容性-.-)

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

我得到了我的collectionView的高度/宽度

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

结果是testModeLoginCollectionView.frame.width = 568.0 widthOflabel 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 但它看起来像这样:enter image description here

我尝试使用Aspect Fit,Scale to Fill等,但它并没有发生太大变化。它太大或太小。 enter image description here

有人有想法吗?我也会使用另一种技术而不是集合View。

  

我什么时候将值存储在我的变量中?

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中尝试过,但没有区别

1 个答案:

答案 0 :(得分:1)

viewDidLayoutSubviews视图后有右框架。 所以你可以在viewDidLayoutSubviews中重新加载数据。 但我有另一种解决方案:你可以使用https://github.com/forkingdog/FDStackView 它有像uistackview一样的api