web-dev-qa-db-ja.com

UICollectionViewで行ごとに3つのセルを表示するにはどうすればよいですか?

この投稿 に従ってカスタムフローレイアウトを使用しました。これが私の実装です:

@implementation CustomLayout
-(void)prepareLayout{
[super prepareLayout];
//    [self invalidateLayout];
if(self.collectionView){
    CGSize newItemSize=self.itemSize;

// Number of items per row
    int itemsPerRow=3;

    float totalSpacing=self.minimumLineSpacing*(itemsPerRow-1);

    newItemSize.width=(self.collectionView.bounds.size.width -totalSpacing)/itemsPerRow;

    if(self.itemSize.height>0){
        float itemAspectRatio=self.itemSize.width/self.itemSize.height;
        newItemSize.height=newItemSize.width/itemAspectRatio;
    }

    [self setItemSize:newItemSize];

}


}
@end

これは私が持っているものです: Result 何が恋しかったですか?他のSOの投稿に出くわしましたが、今のところ運がありません。

6
FlySoFast

Swift3.0。水平方向と垂直方向の両方のスクロール方向と可変間隔で機能します

行ごとに必要なセルの数を宣言します

let numberOfCellsPerRow: CGFloat = 3

指定されたflowLayoutをレンダリングするようにnumberOfCellsPerRowを構成します

if let flowLayout = collectionView?.collectionViewLayout as? UICollectionViewFlowLayout {
    let horizontalSpacing = flowLayout.scrollDirection == .vertical ? flowLayout.minimumInteritemSpacing : flowLayout.minimumLineSpacing
    let cellWidth = (view.frame.width - max(0, numberOfCellsPerRow - 1)*horizontalSpacing)/numberOfCellsPerRow
    flowLayout.itemSize = CGSize(width: cellWidth, height: cellWidth)
}
11
Jože Ws
//Make use of UICollectionViewDelegateFlowLayout Protocol

class RVC: UICollectionViewController {
//some code
}

extension RVC: UICollectionViewDelegateFlowLayout{

    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
    {
          var collectionViewSize = collectionView.frame.size
          collectionViewSize.width = collectionViewSize.width/3.0 //Display Three elements in a row.
          collectionViewSize.height = collectionViewSize.height/4.0
          return collectionViewSize
    }

詳細については、以下のリンクを参照してください。

ICollectionView列数を設定

8
Ashok R

itemSpacing = "セル間の間隔サイズ。"

itemsInOneLine = "1行に表示するアイテムの数。"

collectionWidth = "コレクションビューの幅"

let layout:UICollectionViewFlowLayout =  UICollectionViewFlowLayout()   
let width = (collectionWidth) - itemSpacing * CGFloat(itemsInOneLine - 1)
layout.itemSize = CGSize(width:floor(width/CGFloat(itemsInOneLine)),height:width/CGFloat(itemsInOneLine))
0
Arjun Patel