自动调整 NSCollectionViewItem 的大小以适应屏幕

Auto resize NSCollectionViewItem to fit screen

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

我想不出用 NSCollectionViewFlowLayout 实现它的方法,因为它的项目需要固定大小。我使用 NSCollectionViewGridLayout 非常接近预期的结果。但是,我需要 CollectionViewItems 在缩放包含 NSCollectionView 的 window 时保持它们的纵横比(正方形),而 GridLayout 会根据它们的最小和最大 ItemSize 缩放项目。根据 window 大小和集合中项目的数量,我最终得到的项目不完全是正方形。

示例屏幕截图:distorted NSCollectionViewItems

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

您需要在控制器中实现以下协议:

NSCollectionViewDelegateFlowLayout

它有很多方法允许 fine-tuning 项(大小/位置/边距)。不要忘记将您的集合视图布局设置为 "flow"(在 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 {
    ...
}