私は非常に単純なUICollectionView要件を持っています。 iPhone 6/6s/7および6/6s/7 Plusサイズの場合、2つのセルが並んでいる、つまり1行に2つのセルが並んでいる必要があります。 iPhone 5/5s/SEの場合、1行に1セルが表示されます。私のセルの高さは、今、私はこれがさまざまなiPhone画面サイズのUICollectionViewセル幅の動的サイジング幅
import UIKit
class ViewController: UIViewController, UICollectionViewDelegateFlowLayout, UICollectionViewDataSource {
@IBOutlet weak var collectionView: UICollectionView!
var screenWidth: CGFloat!
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .blue
screenWidth = collectionView.frame.width
// Do any additional setup after loading the view, typically from a nib
let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
// layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 2)
layout.itemSize = CGSize(width: screenWidth/2, height: 194)
layout.minimumInteritemSpacing = 0
collectionView.collectionViewLayout = layout
collectionView.dataSource = self
collectionView.delegate = self
collectionView.backgroundColor = UIColor.blue
}
func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 20
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "customCell", for: indexPath as IndexPath) as UICollectionViewCell
cell.backgroundColor = UIColor.white
cell.layer.borderColor = UIColor.black.cgColor
cell.layer.borderWidth = 0.5
return cell
}
}
は、結果の出力がthis-
あるsomewhat-達成するためのビューコントローラでこのコードを持っている194
にほとんど固定されています。あなたが見ることができるように、iPhone Plusのサイズと5/5s/SEレイアウトはうまくいますか、私は自分の持っているものでうまくいくと言うべきですが、2番目の6/6/7サイズのセルは、お互いに。私はlayout.minimumInteritemSpacing = 0
を持っていることを知っていますが、これを1だけ増やしても、セルは第3の画像のようにプッシュダウンされます。UIEdgeInsets
も同じ問題を引き起こします。
私のUICollectionView全体が、上の0、下の0、左の8、右の8がスーパービューに固定されています。私はいくつかのQ &を見直しました。これはやや関連しており、UICollectionViewDelegateFlowLayout
のsizeForItemAt
機能を使用することを示唆していますが、これを使って解決することはできませんでした。
6/6s/7スクリーン幅のスペースの問題を解決して、間隔をあけて2つのセルを1行に配置するにはどうすればよいですか?私の究極の目標は、デバイス6とそれ以上で1行に2セル、デバイス5とそれ以下(SEを含む)で1行に1セルを持つことです。これはできますか?
ハリー、私は 'sizeForItemAt'を試してみましたが、間隔の問題を解決しましたが、それは私の必要条件ではないデバイス上の1行あたりのセル数を修正します。私の要件は、デバイス5S/5/SEでは、デバイスiPhone 6以上で1行に2セル、1行に1セルを表示することです。それが可能であるかどうかはわかりません。 – Annjawn
更新された私の答え –
素晴らしい。私はウェブでメディアクエリを使うのとほとんど同じようなものを探していました。しかし残念ながら、私はモデルの完全な数を見ているので、私はAppleが次のものをリリースするとすぐに壊れないようにしたい。私はUICollectionViewDelegateFlowLayoutを使用して以前に推奨されていたアプローチを使用しましたが、それは1行あたりのセル数を固定しますが、今は満足しています。助けてくれてありがとう。 – Annjawn