我想在我的collectionView單元中有動態寬度和高度,所以我在每個屏幕上只有2個單元格。從頂部,左側,右側和它們之間10px。collection中的約束條件查看
實施例:
如果我有320像素寬(屏幕)希望每個細胞145px所以這將是 10px的從左145(小區)+ 10px的145之間+(第二小區)+ 10px的右。
我想在我的collectionView單元中有動態寬度和高度,所以我在每個屏幕上只有2個單元格。從頂部,左側,右側和它們之間10px。collection中的約束條件查看
實施例:
如果我有320像素寬(屏幕)希望每個細胞145px所以這將是 10px的從左145(小區)+ 10px的145之間+(第二小區)+ 10px的右。
順應你的控制器UICollectionViewDelegateFlowLayout
協議和實現方法:
import UIKit
class ViewController: UIViewController
{
let numberOfCells = 9
let kCellHeight : CGFloat = 100
let kLineSpacing : CGFloat = 10
let kInset : CGFloat = 10
@IBOutlet weak var collectionView: UICollectionView!
override func viewDidLoad()
{
super.viewDidLoad()
}
}
extension ViewController : UICollectionViewDataSource
{
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
{
return numberOfCells
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
{
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "sampleCell", for: indexPath)
return cell
}
}
extension ViewController : UICollectionViewDelegateFlowLayout
{
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
{
return CGSize(width: (UIScreen.main.bounds.width - 2*kInset - kLineSpacing)/2, height: kCellHeight)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat
{
return kLineSpacing
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets
{
return UIEdgeInsets(top: kInset, left: kInset, bottom: kInset, right: kInset)
}
}
這裏是附截圖:
您既可以使用堆棧視圖,也可以設置單元格的寬度約束,並將其拖入代碼以將常量設置爲屏幕大小的一半。
也是爲什麼你要直接使用的細胞的限制,當你有:
func collectionView(collectionView : UICollectionView,layout collectionViewLayout:UICollectionViewLayout,sizeForItemAtIndexPath indexPath:NSIndexPath) -> CGSize
{
return CGSizeMake(width ,height);
}
如何我可以使用堆棧查看單元格嗎?或寬度約束(所有這些都無法使用它們)。 這個函數返回一個錯誤'CGSizeMake'在Swift中不可用(我使用swift 3) –
那麼單個單元格上的堆棧視圖將它分成相等的視圖...例如。如果你有一個具有屏幕寬度的單元格,你可以在它的內容中使用堆棧視圖來分割它。但並非如此。代碼是用Objective-C編寫的。快速版本是CGSize(寬度:X,高度:Y) –
使用下面的代碼:
FUNC的CollectionView(的CollectionView:UICollectionView,佈局collectionViewLayout:UICollectionViewLayout,sizeForItemAtIndexPath indexPath:NSIndexPath ) - > CGSize {width =(screenSize.width - 30)/ 2 let height = width * aspectRatio // aspectRatio - someValue或將高度設爲常量 return CGSizeMake(width,height) }
這個工作很適合我..
感謝您的回答。這實際上改變了我的佈局,但你可以更新垂直的代碼? –
但您所指定的規格是根據水平佈局。即單元寬度。根據垂直佈局告訴你的規格。 – PGDev
我不明白你..我想在每個屏幕上2個單元格,然後再下2個單元格,等等.. –