自动调整NSCollectionViewItem以适应屏幕

时间:2017-02-14 16:31:49

标签: macos cocoa nscollectionview nscollectionviewitem

我正在尝试创建一个NSCollectionView,它的项目适应可用空间,而不是为项目定义固定大小,并相应地调整NSCollectionView的大小。

我无法找到一种方法来实现NSCollectionViewFlowLayout,因为它需要一个固定大小的项目。我非常接近NSCollectionViewGridLayout所需的结果。但是,当缩放包含NSCollectionView的窗口时,我需要CollectionViewItems保持它们的宽高比(正方形),而GridLayout将项目相应地缩放到它们的min和maxItemSize。根据窗口大小和集合中的项目数量,我最终会得到不完全正方形的项目。

屏幕截图示例:distorted NSCollectionViewItems

我可以通过在网格中设置maximumNumberOfColumns来解决这个问题,具体取决于集合中的项目数和窗口大小,但是它似乎有点麻烦。有没有更好的方法来实现所需的布局?也许使用自定义NSCollectionViewLayout?

1 个答案:

答案 0 :(得分: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 {
    ...
}