2014-01-08 107 views
5

我想实现一个简单的NSViews的堆叠安排,并为此我使用绑定到字典控制器的NSCollectionView。结果我至今低于:NSCollectionView自动调整子视图与自动布局

Normal

左边的标签绑定到控制器项目键和SegmentedControl selectedIndex设置为项目值。

问题是,我不知道如何强制NSCollectionView内的子视图符合容器宽度;发生的事情是,他们维护自己的宽度,当NSCollectionView变得似乎过于狭窄水平滚动条,如下图所示:

enter image description here

我知道this question(和“逆”,this one),和我”对于Autolayout,除了琐碎的事情之外,我从来没有用过很多东西。我想知道AutoLayout带来的所有幻想,有没有办法处理这个问题,而不诉诸于编码和使用事件/通知? (据我所知,观察NSViewFrameDidChangeNotification是一个另类吧?)

感谢

+0

你能够得到这个工作?我想知道是否有办法从IB那里做到这一点。 – tofutim

回答

1

的解决方案是在实际上很简单:切换到基于视图的NSTableViewNSCollectionView不适用于问题中描述的用途。通过NSTableView,您可以获得默认和免费的调整大小行为。

无论你使用绑定还是数据源,它都可以工作,它并不重要。

+0

它也适用于高度,不仅宽度? – gaussblurinc

+0

不确定你的意思到底是什么?你能澄清吗? – insys

+0

我的意思是iOS'self.tableView.rowHeight = UITableViewAutomaticDimension;'。macOS有没有其他选择? – gaussblurinc

1

只是做一些非常相似 - 除了使用NSSplitView子类 - 所以,如果我正确地理解你的问题,你会想在设置限制子视图附加到您的上海华两侧是这样的:

NSDictionary * viewsDict = NSDictionaryOfVariableBindings(filler); 
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[filler]|" 
                  options:0 
                  metrics:nil 
                   views:viewsDict]]; 

你也可能与你的子视图的内容压缩性优先参数,以达到理想的效果捣鼓。

还要注意的是针对OS X 10.9时,专门有一个新的NSStackView类:

NSStackView是在OS X 10.9的新类它是用来布局使用自动布局视图水平或垂直堆叠。必要的约束将被自动创建并添加和移除从堆叠视图视图来保持内聚布局时修改

+1

感谢您的回答。我完全忘了提及我使用绑定(编辑的问题),这是我想继续使用NSCollectionView的原因之一(它非常易于使用)。我玩了一下内容压缩阻力优先级,将它设置为一个较低的值(<500,如[这里]所述(http://stackoverflow.com/questions/15850417/cocoa-autolayout-content-hugging-vs-content - 压缩阻力优先)),但没有任何改变...它似乎为CollectionView的孩子不同的规则适用? – insys

+0

有没有办法从IB设置它? – tofutim