objective-c - 全宽 NSCollectionViewFlowLayout 与 NSCollectionView

标签 objective-c macos nscollectionview nscollectionviewflowlayout

我有一个 NSCollectionViewFlowLayout,其中包含以下内容:

- (NSSize) itemSize
{
    return CGSizeMake(self.collectionView.bounds.size.width, kItemHeight);
} // End of itemSize

- (CGFloat) minimumLineSpacing
{
    return 0;
} // End of minimumLineSpacing

- (CGFloat) minimumInteritemSpacing
{
    return 0;
} // End of minimumInteritemSpacing

我已经尝试过使布局响应的方法(每当调整大小时设置宽度)。我尝试添加以下内容:

[[NSNotificationCenter defaultCenter] addObserver: self
                                         selector: @selector(onWindowDidResize:)
                                             name: NSWindowDidResizeNotification
                                           object: nil];

- (void) onWindowDidResize: (NSNotification*) notification
{
    [connectionsListView.collectionViewLayout invalidateLayout];
} // End of windowDidResize:

如果我展开 Collection View (将大小调整得更大),这会很好地工作。但是,如果我尝试折叠 View (缩小尺寸),则会出现以下异常:

The behavior of the UICollectionViewFlowLayout is not defined because:
The item width must be less than the width of the UICollectionView minus the section insets left and right values, minus the content insets left and right values.
The relevant UICollectionViewFlowLayout instance is <TestListLayout: 0x106f70f90>, and it is attached to <NSCollectionView: 0x106f76480>.

关于如何解决这个问题有什么建议吗?

注意 1:这是 macOS 而不是 iOS(即使错误消息指出 UICollectionViewFlowLayout)。

注意 2:即使我收到布局宽度有效的警告/错误,但我想找出根本问题。

最佳答案

我遇到了同样的问题,但就我而言,我调整了 View 大小。在我更改失效上下文之前,@Giles 解决方案对我不起作用

class MyCollectionViewFlowLayout: NSCollectionViewFlowLayout {

    override func shouldInvalidateLayout(forBoundsChange newBounds: NSRect) -> Bool {
        return true
    }

    override func invalidationContext(forBoundsChange newBounds: NSRect) -> NSCollectionViewLayoutInvalidationContext {
       let context = super.invalidationContext(forBoundsChange: newBounds) as! NSCollectionViewFlowLayoutInvalidationContext
       context.invalidateFlowLayoutDelegateMetrics = true
       return context
    }
}

希望它能帮助别人,因为我花了几个晚上才找到解决方案

关于objective-c - 全宽 NSCollectionViewFlowLayout 与 NSCollectionView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48567326/

相关文章:

macos - Mac OS X和Docker 1.9.1不安全的注册表位置

objective-c - 如何将 id 转换为 float ?

swift - 当 NSCollectionView 滚动到内容末尾时加载更多数据 (macOS)

objective-c - Cocoa-在 NSCollectionView 中为 NSButton 使用representedObject

objective-c - 将字符串拆分为多维 NSMutableDictionary

ios - 指向原始类型的 Objective C 指针

ios - 如何使用 nsjsonserilization 添加登录 api?

ios - 观察NSArray中NSDictionary的值变化

python - 为什么在 Python 中需要在哈希之前声明编码,以及如何执行此操作?

swift - NSCollectionViewItem 的动态大小