具有不同数量项目的 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
我有一个场景,我有 X 个标签(或按钮)。它们应该出现在水平集合视图中。不应该有滚动。问题是 lables/buttons 的数量可以改变 (0-5)。
最好的办法是为每个项目使用宽度相等的 StackView,但我不能使用它,因为它需要 iOS 9。(我也需要 iOS 8.0 的兼容性-.-)
所以我构建了一个集合视图,禁用滚动并想为我的单元格动态设置高度和宽度。
我得到了我的 collectionView
的 height/widthheightOfLabel = 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