我有一个非常简单的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