如何为内容单元格应用不同的contentInset,但不为UICollectionView中的标题应用

时间:2016-07-20 07:05:35

标签: ios swift uicollectionview uicollectionviewlayout

我使用insetForSectionAtIndex方法为我的集合视图中的某个部分设置contentInset,并且我不想将该插入应用于该部分的标题。我需要标题宽度与屏幕一样宽。

ConentInset

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets {
    if section == 1 {
        return UIEdgeInsets(top: 0, left: 15, bottom: 0, right: 15)
    }

    return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}

标题

override func collectionView(collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, atIndexPath indexPath: NSIndexPath) -> UICollectionReusableView {

    let header = collectionView.dequeueReusableSupplementaryViewOfKind(kind, withReuseIdentifier: opsMainDescriptionSegmentedControlCellId, forIndexPath: indexPath) as! MyHeader

    return header
}

2 个答案:

答案 0 :(得分:6)

我必须在我的一个项目中完成同样的事情。

我申请的解决方案:

在Storyboard中,我的收藏视图占据了自动布局约束的全屏。

在viewDidLoad中:

collectionView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)

我将collectionView委托设置为self并且也符合

UICollectionViewDelegateFlowLayout 协议。

然后,您可以访问我在其中返回另一个 UIEdgeInsets

的方法
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {

        return UIEdgeInsets(top: 15, left: 20, bottom: 15, right: 20)

    }

它对我有用。

看看它到底是怎么回事。

enter image description here

希望这能够帮助他人。

答案 1 :(得分:0)

你不能这样做。 UICollectionViews标头需要与UICollectionView本身一样宽。如果您希望标题比UICollectionView更短(宽度) - 我的建议是在标题内使用单独的UIView并将标题设置为清除。这样看起来它会比UICollectionView的宽度短。