2017-03-09 2 views
1

イメージのコレクションビューを作成しようとしています。コレクションビューのセルを1行に3つずつ正確に合わせるように調整する

func numberOfSections(in collectionView: UICollectionView) -> Int { 
    return 1 
} 

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return posts.count 
} 

、これは、それが(ImageViewの幅は125、375スクリーン幅の第三である)私のストーリーボードにセットアップされた方法である:

マイコレクションビューのデータソースがある

enter image description here

しかし、私はアプリを実行し、いくつかの写真を追加すると、このようになります:

これを修正して、1行に3枚の画像が表示されるようにするにはどうすればよいですか?助けてくれてありがとう!

+0

ここにコレクションビューが必要ですか?コードで説明するようなイメージビューのグリッドを作成するのはとても簡単です。他のコレクションビューの機能が必要ない場合は、コレクションビューで何か基本的なことを気にしないのはなぜですか? – matt

+0

これは別の方法だと思いますが、私は別のプロジェクトでそれを覚えています。問題は解決されましたので、私はコレクションビューのままにしておきます。代わりにアプローチを使用することに利点がありますか、最初に実装するほうが簡単ですか? – KingTim

+0

"有利な点"は、目的の構造でコレクションビューを作成する方法を明確に知らなかったことだけでした。問題が解決すれば、それと一緒に是非! – matt

答えて

7

あなたは間隔のもののため

UICollectionViewDelegateFlowLayout

を実装する必要があります。あなたはまた、collectionViewCellsのあなたの間隔が正しい取得するには、これらの機能を追加することができ

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
    let yourWidth = collectionView.bounds.width/3.0 
    let yourHeight = yourWidth 

    return CGSize(width: yourWidth, height: yourHeight) 
} 

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { 
    return UIEdgeInsets.zero 
} 

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { 
    return 0 
} 

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { 
    return 0 
} 
+1

パーフェクト、魅力的なように働いた。ありがとう! – KingTim

+0

あなたは大歓迎です:) – Kingalione

2

の1-あなたが準拠する必要があり、このようなcollectionViewCellsのサイズを設定し

UICollectionViewDelegateFlowLayout

次のように、collectionView(_:layout:sizeForItemAt:)方法をメンター:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
    let screenWidth = UIScreen.main.bounds.width 
    let scaleFactor = (screenWidth/3) - 6 

    return CGSize(width: scaleFactor, height: scaleFactor) 
} 

を最小スペースは8 -for例 - であると仮定すると、

enter image description here

出力は正方形サイズ各行のための3つの項目であるべきです。

備考:あなたがゼロになるようにセル間のスペースを設定したい場合は、scaleFactorは次のようになります。これは助け

let scaleFactor = (screenWidth/3) 

希望。