我正在尝试实现简单NSView的堆叠排列,为此我使用绑定到字典控制器的NSCollectionView。我到目前为止的结果如下:
左侧的标签绑定到控制器项目键,SegmentedControl selectedIndex绑定到项目值。
问题是,我不知道如何强制NSCollectionView中的子视图符合容器宽度;会发生什么,他们保持自己的宽度,当NSCollectionView变得太窄时,出现水平滚动条,如下所示:
我知道this question(以及“反向”,this one),而且我从来没有在Autolayout上做过太多事情而不是琐碎的事情。我想知道,凭借AutoLayout带来的所有功能,有没有办法解决这个问题,而无需使用编码和使用事件/通知? (我知道观察NSViewFrameDidChangeNotification是另一种选择,对吗?)
由于
答案 0 :(得分: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 :(得分:1)
解决方案实际上非常简单:切换到基于视图的NSTableView
。 NSCollectionView
不适用于问题中描述的用途。使用NSTableView
,您可以默认免费获得调整大小的行为。
无论您使用Bindings还是数据源,它都有效,但它并不重要。