2017-02-20 23 views
1

大小細胞有gridlist看起來像這樣我如何在GridView中

class ListViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout{ 

private var collection: ACollection? 
private var collectionViewLayout:UICollectionViewFlowLayout? 


override func loadView() { 
    super.loadView() 

    collectionViewLayout = UICollectionViewFlowLayout() 
    collectionViewLayout?.itemSize.width = 128 
    collectionViewLayout?.itemSize.height = 227 
    view = UICollectionView(frame: CGRect.zero, collectionViewLayout: collectionViewLayout!) 
} 

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 
    let someObj: SomeObj = collection!.getObject(index: indexPath.item) 
    let cell: UICollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: NSStringFromClass(UICollectionViewCell.self), for: indexPath as IndexPath) 
    let cellView: UIImageView = UIImageView(image: object.image) 

    cellView.frame = cell.bounds 
    cell.contentView.addSubview(cellView) 
    return cell 
} 

我想我的細胞具有不同的縱橫比,雖然取決於someObj中值。如何在不重疊的情況下調整單元格大小?我試圖使

cellView.frame = CGRect(x:0,y:0,width:100,height:300) 
cellView.frame =cell.bounds 

但是細胞重疊。

+0

我相信你應該在'UICollectionViewDelegateFlowLayout'中實現'collectionView(,layout:sizeForItemAt:)'函數,因爲它看起來像你正在使用流佈局。 – sCha

+0

@sCha有點作用。我看到的是,當我改變尺寸時,它繪製一箇舊尺寸的單元格,然後再用新尺寸繪製另一個單元格 – user2175783

回答

1

也許我會詳細解釋一下這個問題。

首先,如果實現collectionView(_:layout:sizeForItemAt:)方法,你不需要指定以下內容:

collectionViewLayout?.itemSize.width = 128 
collectionViewLayout?.itemSize.height = 227 

這是每一個細胞的默認大小。其次,您在每個默認單元格頂部看到的重疊部分可能是要添加到重用單元格上的cellView s(UIImageView s)。問題是,您正試圖在當前單元格上添加UIImageView,每次委託單元都要求單元格。您需要檢查UIImageView是否已經存在,因爲整個單元格可能已被重新使用,仍然具有先前添加的圖像視圖。

+0

如何檢查UIImageView是否已經存在? – user2175783

+1

@ user2175783要麼給視圖添加一個標籤並使用'viewWithTag'方法引用它,要麼可以定義一個自定義單元格並使用它,以便它帶有您需要的所有子視圖。我個人推薦第二種方案,但第一種方法要簡單得多。 – sCha