注意结果证明这是一个简单的错误,细胞不会“坐在底部”。然而,这是一个有趣的问题:“如何上下移动细胞。”在蛮力解决方案下面:编写自己的流程布局。
令我感到惊讶的是,唯一的方法就是完成子类UICollectionViewFlowLayout
并在layoutAttributesForElementsInRect
中编写一些棘手的代码。
这有可能在将来帮助某人,因为layoutAttributesForElementsInRect
周围的示例代码非常少。希望它有所帮助。
-
事实证明我的单元格不会位于底部的原因是我以前在我的UICollectionViewController中有这个...
-(void)viewDidLoad
{
[super viewDidLoad];
// the following code is very useful to, for example,
// "nudge short lists towards the middle..." - if you want the list
// to more sit in the middle of the screen, when only a few items.
cvHeight = CGRectGetHeight(self.collectionView.bounds);
[self.collectionView setContentInset:
UIEdgeInsetsMake(cvHeight * 0.175, 0, cvHeight * 0.30, 0) ]; //top,l,b,r
}
当然,当我改为“全视图单元格大小”(每个屏幕一个单元格)时,该代码失败。
我有一个简单的UICollection视图,它是iPhone的宽度,高约250。单元格与集合视图的大小完全相同。
细胞不会居中,它们总是坐得很高。 (即在视图之外。)
故事板中的我的集合视图“大小”都只是零。可能是什么问题?
答案 0 :(得分:3)
这里有一个蛮力"解决问题的方法 - 编写自己的FlowLayout !!
它有效......
class SimpleFlowLayout: UICollectionViewFlowLayout {
override init() {
super.init()
initialize()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initialize()
}
func initialize() {
self.scrollDirection = .horizontal
self.minimumInteritemSpacing = 0.0
self.minimumLineSpacing = 0.0
}
override var collectionViewContentSize: CGSize {
return super.collectionViewContentSize
}
override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
let allItems = super.layoutAttributesForElements(in: rect)
for attribute in allItems! {
print ("attribute.frame.origin.y ..... \(attribute.frame.origin.y)")
attribute.frame = CGRect(x: attribute.frame.origin.x,
y: attribute.frame.origin.y + 34,
width: attribute.frame.size.width,
height: attribute.frame.size.height)
// "go figure" ... add 34
}
return allItems;
}
你的方式"设置" UICollectionViewFlowLayout基本上就是这样......(据我所知!)
class YourFancyDisplay: UICollectionViewController {
override func viewDidLoad() {
super.viewDidLoad()
collectionView!.contentInset = UIEdgeInsetsMake(0, 0, 0, 0)
collectionView!.collectionViewLayout = SimpleFlowLayout()
...
答案 1 :(得分:1)
试试这个。希望它可以帮助
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
return collectionView.frame.size;
}
(对于未来的读者,确实你通常也需要另一个......)
-(CGSize) collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout *)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
return self.view.frame.size;
}
-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout*)collectionViewLayout
insetForSectionAtIndex:(NSInteger)section
{
return UIEdgeInsetsMake(0,0,0,0); //t,l,b,r
}