使用子视图Autolayout NSCollectionView

时间:2014-07-08 01:00:49

标签: cocoa autolayout

我在一个.xib中有一个NSCollectionView 另一个.xib

中该集合视图的子视图集合视图项

我正在尝试为我的集合视图项添加约束 让它

  1. 将边缘与超视图的视图对齐
  2. 根据超级视图调整自身大小
  3. 第二个.xib中的集合视图项是带有约束的NSTableView,如附件中所示。

    Constraints configuration

    启动后,我得到以下

    1. superview,即NSCollectionView比其子视图大。
    2. 如果我调整整个窗口的大小并使其变小,NSCollectionView也会自行调整大小,但子视图不会。见第二个附件。
    3. enter image description here

2 个答案:

答案 0 :(得分:2)

NSCollectionView不会做你想做的事。这些项目将它们的大小提供给集合视图,然后将它们放在网格中。

考虑到您尝试实现的相当简单的单行布局,您可以使用NSStackView。如果您不想要求10.9或更高版本,只需创建一个普通的NSView作为容器,然后用子视图填充它就可以使堆栈视图的道德等效。您可以将此视图放入滚动视图中。容器视图将具有约束以使其顶部和底部保持与剪辑视图相等。它的宽度与剪辑视图无关。 (我不知道你是否希望容器视图的前沿与剪辑视图相关联。这可能需要一些实验。)

设置布局约束,以便在容器视图中按照您的喜好排列子视图,并使其保持足够宽以包含所有子视图。您需要约束来保持子视图的顶部与容器视图的顶部相关,对于底部也是如此。但是,请确保子视图的高度至少相对于视图到剪辑视图约束的优先级是灵活的。

答案 1 :(得分:0)

通过在视图控制器的collectionView.collectionViewLayout?.invalidateLayout()中调用viewWillLayout来处理调整大小时,我可以通过将itemSize设置为FlowLayoutDelegate中的集合视图宽度来实现NSCollectionView所描述的内容。 / p>