根据屏幕大小设置UICollectionViewFlowLayout的itemSize

时间:2015-06-25 23:44:25

标签: ios cocoa-touch ios8

我有一个' UICollectionView'我用来通过子类化UICollectionViewFlowLayout一次一个地水平分页很多项目。

为此,我在双方都设置了插入,并覆盖了targetContentOffsetForProposedContentOffset(: CGPoint, withScrollingVelocity: CGPoint) -> CGPoint方法,以使项目始终位于屏幕的中心。

然后让单元格填满整个屏幕,但只是在屏幕上显示上一个和下一个单元格的提示:

|-------------------|
|-| |-----------| |-|
|x| |xxxxxxxxxxx| |x|
|x| |xxxxxxxxxxx| |x|
|x| |xxxxxxxxxxx| |x|
|x| |xxxxxxxxxxx| |x|
|x| |xxxxxxxxxxx| |x|
|-| |-----------| |-|
|-------------------|

为此,我在itemSize上设置了prepareLayout

override func awakeFromNib() {
  let spacingConstant: CGFloat = 16.0
  self.minimumLineSpacing = spacingConstant * 2
  self.sectionInset = UIEdgeInsets(top: 30, left: spacingConstant * 3, bottom: 30, right: spacingConstant * 3)
  self.scrollDirection = .Horizontal
}
override func prepareLayout() {
  super.prepareLayout()
  if let mySize = self.collectionView?.frame {
    let size = CGSize(
      width: mySize.width - self.sectionInset.right - self.sectionInset.left,
      height: mySize.height - self.sectionInset.top - self.sectionInset.bottom
    )
    self.itemSize = size
  }
}

但是我一直警告说itemSize必须小于视图的高度减去插入,这正是我在这里所做的。

the behavior of the UICollectionViewFlowLayout is not defined because:
the item height must be less than the height of the UICollectionView minus the section insets top and bottom values.

完成这项工作的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我得到另一个警告,帮助了我,显然会帮助你:

  

项高度必须小于UICollectionView的高度   减去部分插入顶部和底部值,减去内容   插图顶部和底部值。

只需添加以下内容:

let size = CGSize(
      width: mySize.width - self.sectionInset.right - self.sectionInset.left - self.collectionView!.contentInset.left - self.collectionView!.contentInset.right,
      height: mySize.height - self.sectionInset.top - self.sectionInset.bottom - self.collectionView!.contentInset.top - self.collectionView!.contentInset.bottom
    )