UICollectionView垂直流布局保留在集合边界中

时间:2015-09-28 10:09:58

标签: ios swift uicollectionview uicollectionviewlayout

我有一个垂直单元格对齐的UICollectionView,但我也希望垂直剖面对齐,我也希望将这些剖面保留在UICollectionView的当前帧内,这意味着如果一个部分到达终点并且它更长然后收集本身,然后它将进入下一行。

这就是现在的样子:

collectionview

这是我想要最终得到的最终结果:

final collection

到目前为止,这是我的代码:

class LettersCollectionTestViewController: UIViewController, UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {

    @IBOutlet weak var collectionContainer: UIView!
    var collectionView: UICollectionView?

    private let ReuseIdentifierCollectionLetterCell = "LetterCollectionViewCell"

    var collectionWords: NSArray?

    var itemSize: CGFloat = 25.0
    var itemSpacing: CGFloat = 5.0

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.

        let logoWord: String = "This is just this"
        self.collectionWords = logoWord.componentsSeparatedByString(" ")
        self.initializeCollection()
    }

    func initializeCollection() {

        let collectionViewLayout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
        collectionViewLayout.itemSize = CGSizeMake(self.itemSize, self.itemSize)
        collectionViewLayout.minimumInteritemSpacing = 0
        collectionViewLayout.minimumLineSpacing = self.itemSpacing
        collectionViewLayout.scrollDirection = UICollectionViewScrollDirection.Vertical

        let collectionView: UICollectionView = UICollectionView(frame: self.collectionContainer.bounds, collectionViewLayout: collectionViewLayout)
        collectionView.delegate = self;
        collectionView.dataSource = self;
        collectionView.showsHorizontalScrollIndicator = false
        collectionView.showsVerticalScrollIndicator = false

        collectionView.registerClass(LetterCollectionViewCell.self, forCellWithReuseIdentifier: self.ReuseIdentifierCollectionLetterCell)
        collectionView.registerNib(UINib(nibName: self.ReuseIdentifierCollectionLetterCell, bundle: nil), forCellWithReuseIdentifier: self.ReuseIdentifierCollectionLetterCell)

        self.collectionView = collectionView
        self.collectionContainer.addSubview(collectionView)
    }

    // MARK: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout

    func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
        print("clicked item at index: \(indexPath.row)")
    }

    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell: LetterCollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier(self.ReuseIdentifierCollectionLetterCell, forIndexPath: indexPath) as! LetterCollectionViewCell

        let scalingTransform: CGAffineTransform = CGAffineTransformMakeScale(-1, 1)
        cell.transform = scalingTransform

        return cell
    }

    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return (self.collectionWords?.objectAtIndex(section).length)!
    }

    func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
        return (self.collectionWords?.count)!
    }

    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets {
        return UIEdgeInsets(top: self.itemSpacing, left: self.itemSpacing, bottom: self.itemSpacing, right: self.itemSpacing)
    }

}

我需要做什么?我知道我应该创建一个自定义FlowLayout,但我应该从哪里开始?我从来没有这样做过。

提前致谢!

0 个答案:

没有答案