2017-03-09 40 views
1

我正在嘗試製作圖像的集合視圖,以便每行有3個,兩者之間沒有間距。對齊集合視圖單元格,以恰好適合每行3個

我收藏視圖數據來源:

func numberOfSections(in collectionView: UICollectionView) -> Int { 
    return 1 
} 

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
    return posts.count 
} 

,這是它如何建立在我的故事板(ImageView的寬度爲125,375屏幕寬度的三分之一):

enter image description here

但是,當我運行應用程序並添加一些照片時,它看起來像這樣:

enter image description here

我該如何解決這個問題,以便每行看到3個圖像?謝謝你的幫助!

+0

你真的需要在這裏收集視圖嗎?只需製作一個圖像視圖網格,例如您在代碼中描述的內容就非常簡單。如果您不需要任何其他集合視圖功能,爲什麼還要爲集合視圖打造如此基本的東西? – matt

+0

我想這將是另一種方式來做到這一點,我會記住另一個項目。這個問題現在已經解決了,所以我不妨將它保存爲一個集合視圖 - 使用你的方法會有什麼好處,還是最初實現起來更容易? – KingTim

+0

「優勢」只會是你顯然不知道如何製作具有所需結構的集合視圖。如果問題解決了,一定要留下來! – matt

回答

7

您必須實現

UICollectionViewDelegateFlowLayout

的間距的東西。

設置collectionViewCells的大小是這樣的:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
    let yourWidth = collectionView.bounds.width/3.0 
    let yourHeight = yourWidth 

    return CGSize(width: yourWidth, height: yourHeight) 
} 

您還可以添加這些功能,讓您的正確的collectionViewCells的間距:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets { 
    return UIEdgeInsets.zero 
} 

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat { 
    return 0 
} 

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat { 
    return 0 
} 
+1

完美,像魅力一樣工作。謝謝! – KingTim

+0

不客氣:) – Kingalione

2

您必須遵守到UICollectionViewDelegateFlowLayout

2-您應該執行彪collectionView(_:layout:sizeForItemAt:)方法,如下所示:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { 
    let screenWidth = UIScreen.main.bounds.width 
    let scaleFactor = (screenWidth/3) - 6 

    return CGSize(width: scaleFactor, height: scaleFactor) 
} 

假設最小空間是8 - 用於示例 - ,

enter image description here

輸出應該是三個項目對於每一行,正方形的尺寸。

備註:如果您想設置單元格之間的空間是零,那麼scaleFactor應該是:

let scaleFactor = (screenWidth/3) 

希望這有助於。

相關問題