我有一個非常簡單的UICollectionView要求。對於iPhone 6/6s/7和6/6s/7 Plus尺寸,兩個單元必須並排顯示,即每行兩個單元。而對於iPhone 5/5s/SE,它應該顯示每行1個單元。我的細胞高度幾乎固定在194爲各種iPhone屏幕尺寸動態調整UICollectionView單元寬度的寬度
現在我有這樣的代碼在視圖控制器來實現這一somewhat-
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
}
}
輸出的結果是這個 -
正如你所看到的,iPhone Plus的尺寸和5/5s/SE的佈局是好的,或者我應該說,我對那些有我所擁有的,但第二即6/6s/7尺寸的細胞幾乎卡住對彼此。我知道我有layout.minimumInteritemSpacing = 0
,但是如果我將它增加到1,那麼單元格將像第三個圖像一樣被壓下,使用UIEdgeInsets
也會導致同樣的問題。
我的整個UICollectionView被固定在頂端0,底部0,左邊8和右邊8到超級視圖。我回顧了幾個Q &正如在SO這是有點相關,並建議使用UICollectionViewDelegateFlowLayout
的sizeForItemAt
功能,但我還沒有能夠解決這個使用。
如何解決6/6s/7屏幕寬度的間距問題,讓兩個單元格以一定間距排成一行?我的最終目標是在設備6及以上的設備上每行有2個單元,對於設備5s及以下(包括SE),每行有1個單元。這可以做到嗎?
Harry,我嘗試過'sizeForItemAt',雖然它解決了間距問題,但它也使我修復了每個設備上每行的單元數量,這並不是我的要求。我的要求是爲設備iPhone 6和更高版本顯示每行2個單元,並在設備5s/5/SE上顯示每行1個單元。不知道這是否是可能的。 – Annjawn
更新了我的答案 –
太好了。我一直在尋找類似於在網絡中使用媒體查詢的東西。但不幸的是,現在我看到了大量的模型,我不希望蘋果發佈下一個應用程序時應用程序中斷。我用你以前推薦的方法使用UICollectionViewDelegateFlowLayout,雖然它會使每行固定的單元數目我現在滿意。謝謝您的幫助。 – Annjawn