2017-02-14 67 views
1

我想創建一個NSCollectionView它的項目適應可用空間,而不是爲項目定義一個固定的大小,並相應地調整NSCollectionView的大小。自動調整大小NSCollectionViewItem適合屏幕

我找不出一種方法來實現NSCollectionViewFlowLayout,因爲它需要一個固定大小的項目。我非常接近NSCollectionViewGridLayout所需的結果。不過,當縮放包含NSCollectionView的窗口時,我需要CollectionViewItem來保持它們的寬高比(正方形),而GridLayout將這些項目相應地縮放到它們的min和maxItemSize。根據窗口大小和集合中的項目數量,最終會得到不完全正方形的項目。

實例截圖:distorted NSCollectionViewItems

我大概可以解決與網格設置maximumNumberOfColumns,根據收集和窗口大小中的項目數量,但它似乎有點麻煩。有沒有更好的方法來實現所需的佈局?也許用自定義的NSCollectionViewLayout?

回答

1

您需要實現在控制器以下協議:

NSCollectionViewDelegateFlowLayout 

它有很多的允許微調的項目(尺寸/位置/邊距)的方法。不要忘記將你的集合視圖佈局設置爲「流動」(在IB中)。

查找實現以下方法:

func collectionView(collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, insetForSectionAtIndex section: Int) -> NSEdgeInsets { 

    ... 

} 

func collectionView(collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> NSSize { 

    ... 
} 

func collectionView(collectionView: NSCollectionView, layout collectionViewLayout: NSCollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat { 
    ... 
} 
+0

這將意味着計算依賴於窗口的大小和項目的數量細胞的大小,對不對?這沒有「自動佈局」? – rooney

+0

正確。這些細節沒有自動佈局。我希望他們能讓CSS-flexbox看起來更多一點。 –

相關問題