【问题标题】:Auto resize NSCollectionViewItem to fit screen自动调整 NSCollectionViewItem 的大小以适应屏幕
【发布时间】:2017-02-14 16:31:49
【问题描述】:

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

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

示例截图:distorted NSCollectionViewItems

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

【问题讨论】:

    标签: macos cocoa nscollectionview nscollectionviewitem


    【解决方案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 {
        ...
    }
    

    【讨论】:

    • 这意味着根据窗口大小和项目数量计算单元格的大小,对吗?没有“自动布局”吗?
    • 正确。这些细节没有自动布局。我希望他们让它看起来更像 CSS-flexbox。
    猜你喜欢
    • 2021-10-31
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 2011-02-03
    • 1970-01-01
    相关资源
    最近更新 更多