Cocoa 带子视图的自动布局NSCollectionView

Cocoa 带子视图的自动布局NSCollectionView,cocoa,autolayout,Cocoa,Autolayout,我有一个NSCollectionView在一个。xib和 另一个.xib中该集合视图的子视图集合视图项 我正在尝试向集合视图项添加约束,以便 顺其自然 将边与superview的视图对齐 根据superview调整自身大小 第二个.xib中的集合视图项是一个NSTableView,具有附件中所示的约束 在启动时,我得到以下信息 超级视图,即NSCollectionView大于其子视图 如果我调整整个窗口的大小并使其变小,NSCollectionView也会调整自身大小,但子视图不会。见附件二

我有一个NSCollectionView在一个。xib和 另一个.xib中该集合视图的子视图集合视图项

我正在尝试向集合视图项添加约束,以便 顺其自然

  • 将边与superview的视图对齐
  • 根据superview调整自身大小
  • 第二个.xib中的集合视图项是一个NSTableView,具有附件中所示的约束

    在启动时,我得到以下信息

  • 超级视图,即NSCollectionView大于其子视图
  • 如果我调整整个窗口的大小并使其变小,NSCollectionView也会调整自身大小,但子视图不会。见附件二

  • NSCollectionView
    不会执行您想要的操作。这些项目将其大小提供给集合视图,然后集合视图将其放置在网格中

    考虑到您试图实现的相当简单的单行布局,您可以使用
    NSStackView
    。如果您不想要求10.9或更高版本,您可以创建一个简单的NSView作为容器,然后用子视图填充它,从而使其成为堆栈视图的道德等价物。您可以将此视图置于滚动视图中。容器视图将具有使其顶部和底部与剪辑视图相等的约束。其宽度与剪辑视图的宽度无关。(我不知道是否要将容器视图的前缘绑定到剪辑视图。这可能需要一些实验。)


    设置布局约束,使子视图在容器视图中按您喜欢的方式排列,并使其足够宽以容纳所有子视图。您将希望约束保持子视图的顶部与容器视图的顶部相关,并且与底部相关。然而,确保子视图的高度至少相对于视图到剪辑视图约束的优先级是灵活的。

    调用时,通过将itemSize设置为FlowLayoutDelegate中集合视图的宽度,我已经能够实现您对NSCollectionView的描述
    collectionView.collectionViewLayout?.invalidateLayout()
    在视图控制器的
    viewWillLayout
    中处理大小调整。

    项目通常向集合视图提供其大小,然后集合视图将其放置在网格中。让项目尝试使自己符合集合视图提供的大小没有多大意义。集合视图如何选择大小?也就是说,您可以在collection视图上设置最小和最大项目大小。我明白了。是否可以通过NSScrollView实现这一点?我知道NSCollectionView嵌入在NSScrollView中实现了什么?您希望如何确定集合视图中项目的大小?您可以根据需要制作任意大小的集合视图。
    NSCollectionView
    无法满足您的需要。考虑到相当简单的单行布局,您可以使用
    NSStackView
    。您将负责为每个表示的对象添加一个视图,但堆栈视图将水平放置它们。在垂直方向上,您可以在包含的视图的边缘和堆栈视图的边缘之间设置约束。滚动视图除了为大于它的内容视图提供滚动之外,什么都做不了。只需创建一个普通的
    NSView
    作为容器,然后用子视图填充它,就可以实现堆栈视图的道德等效。设置布局约束以保持子视图在其中按您喜欢的方式排列,并保持平面视图足够宽以容纳所有子视图。将平面视图设置为与剪辑视图一样高,子视图设置为与视图一样高。确保子视图的高度至少相对于视图到剪裁视图约束的优先级是灵活的。