2016-11-27 48 views
0

我有一個集合視圖,並希望在多個設備上保持一致的行數和列數。在iPhone 6s Plus上,顯示6個項目,但在iPhone 5s上查看應用程序時,只顯示四個項目。具有固定行數和列數的集合視圖

見我的佈局在這裏:Layout on iPhone 6s Plus

我怎樣才能使集合視圖顯示在各種設備上相同的項目?

回答

1

您需要根據collectionView中的屏幕尺寸計算項目大小。最小間距應該固定。

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 
    if UIScreen.mainScreen().applicationFrame.width > 375 { //iPhone 6plus 
     //Calculate cell size 
    } 
    else if UIScreen.mainScreen().applicationFrame.width <= 375 && UIScreen.mainScreen().applicationFrame.width > 320 { //iPhone 6 
     //Calculate cell size 
    } 
    else { 
     //Calculate cell size 
    } 
    return CGSizeMake(width, height) 
} 

也順應UICollectionViewDelegateFlowLayout

class XYZ : UICollectionViewController, UICollectionViewDelegateFlowLayout 
+0

這就是我走到哪裏卡住瞭如何動態地計算細胞大小 – User

4

的SWIFT 3.0。

確保您使用的是autoLayout並實現了UICollectionViewsizeForItemAtIndexPath

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 

     return CGSize(width: collectionView.bounds.size.width/3 - yourCellInterItemSpacing, height: collectionView.bounds.size.height/3 - yourCellInterItemSpacing) 
    } 

這將使你的根據屏幕尺寸來創建(假設你正在使用的autoLayout),你應該需要的列/行數除以。將寬度除以所需的列數和高度(按行數)。

要提供屏幕截圖中的前導和尾隨空格,只需在故事板中向UICollectionView添加適當的空格即可。即前後空格相當於yourCellInterItemSpacing

請確保您的課程符合UICollectionViewDelegateFlowLayout協議!

+0

嗨Rikh我設法使它工作在所有設備相同的佈局,但一個更多issuse面臨的是,當我滾動在下一個2或3頁的單詞間距不是很好,就像在第一次啓動顯示下一頁項目一半我如何使所有頁面相同的sapcing,不應該母豬其他頁面項目。我啓用了尋呼也爲Collectionview – User

+0

這將需要你告訴我你是如何設置你的'UICollectionView'即。正如我所建議的那樣添加了前導和尾隨?以及你使用什麼約束來顯示單元格?總體而言,如何設置頁面。 – Rikh

+0

請看看我已經添加圖像我把viewview在viewcontroller和多數民衆贊成在設計 – User

-1

讓你的類符合UICollectionViewDatasourceUICollectionViewDelegate,並添加這些功能,使10行5列:

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

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