NSCollectionView可以自动调整其子视图的宽度以显示一列

lit*_*rva 9 cocoa interface-builder nscollectionview

我有一个NSCollectionView包含的集合CustomViews.最初,它将子视图平铺为列和行,如网格.然后我将ColumnsIB中的属性设置为1,所以现在它只是在行中一个接一个地显示它们.然而,即使我CustomView的宽度为400px,它设置为自动调整大小,NSCollectionView宽度为400px,并且设置为1列,子视图的宽度约为80px.

我知道我可以通过以下方式解决这个问题:

CGFloat width = collectionView.bounds.size.width;
NSSize size = NSMakeSize(width, 85);
[collectionView setMinItemSize:size];
[collectionView setMaxItemSize:size];
Run Code Online (Sandbox Code Playgroud)

但是将此代码放在awakeFromNib我的方法中WindowController只在程序启动时设置正确的宽度.当我调整窗口大小(和NSCollectionView我指定的自动调整大小)时,CustomViews保持其初始设置的宽度.

如果需要的话,我很乐意自己调整子视图的大小,但我对Cocoa很新,似乎找不到任何解释如何做这种事情的文章.有人能指出我正确的方向吗?

安东尼

tof*_*tim 10

真正的答案是将maxItemSize设置为0,0(NSZeroSize).否则,计算它.

[self.collectionView setMaxItemSize:NSZeroSize];
Run Code Online (Sandbox Code Playgroud)

这可以设置awakeFromNib.


and*_*n22 -5

马特·加拉格尔 (Matt Gallagher) 精彩的博客《Cocoa with Love》即将解决这个问题。本周,他分享了单列视图(如所讨论的视图)的绑定详细信息:

http://cocoawithlove.com/2010/03/designing-view-with-bindings.html

在下一篇文章中,他承诺分享其余的实现,这应该会给你你正在寻找的东西。

(我应该注意到,他直接子类化 NSView 并重新实现许多 NSCollectionView 的功能。这似乎很常见;没有多少人喜欢子类化 NSCollectionView。)

编辑:看来他违背了他的诺言……我们从未收到过那封邮件。请参阅下面 tofutim 的回答。